我需要一个数组类型来存储对象。但我需要两种类型的存取属性的是这样的:java中的两个不同类型的索引数组
数组[0] >>> object1
阵列[ “一”] >>> object1
这意味着索引0(一个整数)和索引a(一个字符串)取消引用数组中的同一个对象。为了存储对象,我认为我们需要集合,但我如何访问上面提到的属性?
我需要一个数组类型来存储对象。但我需要两种类型的存取属性的是这样的:java中的两个不同类型的索引数组
数组[0] >>> object1
阵列[ “一”] >>> object1
这意味着索引0(一个整数)和索引a(一个字符串)取消引用数组中的同一个对象。为了存储对象,我认为我们需要集合,但我如何访问上面提到的属性?
从字符串键,数字键地图:
Map<String, Integer> keyMap = new HashMap<String, Integer>();
keyMap.put("a", o);
// etc
然后创建你的对象,其中的MyObject是值类型的列表:
List<MyObject> theList = new ArrayList<MyObject>();
通过访问整数:
MyObject obj = theList.get(0);
Acc ess by String
MyObject obj = theList.get(keyMap.get("a"));
这需要维护您的关键数据结构,但允许从一个数据结构访问您的值。
可以encapsulte这是一类,如果你喜欢:
public class IntAndStringMap<V> {
private Map<String, Integer> keyMap;
private List<V> theList;
public IntAndStringMap() {
keyMap = new HashMap<String, Integer>();
theList = new ArrayList<V>();
}
public void put(int intKey, String stringKey, V value) {
keyMap.put(stringKey, intKey);
theList.ensureCapacity(intKey + 1); // ensure no IndexOutOfBoundsException
theList.set(intKey, value);
}
public V get(int intKey) {
return theList.get(intKey);
}
public V get(String stringKey) {
return theList.get(keyMap.get(stringKey));
}
}
数组仅支持indecies。
看来你可以通过索引和按键来查找对象。在这种情况下,我建议你有两个集合。每种类型的查找一个。
List<MyObject> list = new ArrayList<MyObject>();
Map<String, MyObject> map = new HashMapList<MyObject>():
// array[0] >>> object1
MyObject object0 = list.get(0);
// array["a"] >>> object1
MyObject objectA = map.get("a");
我们如何将它们合并为一个?我们应该重写ArrayList add,get等方法吗? – mausmust 2011-04-19 14:29:23
@mausmust:不,当你可以使用构图时不要继承。您可以使用'add(key,value)','get(index)'和'get(key)'方法创建一个包含列表和地图的自定义类型。 – Henning 2011-04-19 14:34:51
你为什么要把它们合并成一个?如果你有一个数据库有两种执行查找的方法,你有两个indecies。无论如何,你不能将添加,获得和许多其他人结合起来,因为他们采取不同的论点。如果你真的必须这样做,你可以创建一个包装器来结合两者。 – 2011-04-19 14:35:55
请问1名映射到“B”,2为“C”,等等,或者是由数字和字符串任意访问这可能不会通过模式彼此相关? – justkt 2011-04-19 14:26:48
0映射到字符串键,1映射到另一个字符串键等,但它们显示数组中的同一对象 – mausmust 2011-04-19 14:30:04
您多久添加一次/从该“映射”中删除元素,以及如何通过索引或按键?正如答案中已经指出的那样,你可以创建一个由列表和地图组成的类,但是对上述问题的回答可以提供实现细节的提示(即是否存储key-> index或index->关键映射)。 – Thomas 2011-04-19 14:41:54