java中的两个不同类型的索引数组

时间:2011-04-19 14:22:52

标签: java arrays indexing dereference

我需要一个用于存储对象的数组类型。但是我需要两种类型的访问属性:

array [0]>>> object1

array [“a”]>>> object1

这意味着索引0(整数)和索引a(字符串)取消引用数组中的相同对象。对于存储对象,我认为我们需要集合,但我如何才能访问上面提到的属性?

2 个答案:

答案 0 :(得分:2)

创建从字符串键到数字键的映射:

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);

按字符串访问

MyObject obj = theList.get(keyMap.get("a"));

这需要维护您的密钥数据结构,但允许从一个数据结构访问您的值。

如果您愿意,可以封装在课堂中:

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));
    }
}

答案 1 :(得分:1)

Arrays只支持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");