Два разных типа индексированного массива в Java - PullRequest
1 голос
/ 19 апреля 2011

Мне нужен тип массива для хранения объектов.Но мне нужно два типа свойств доступа, таких как:

array [0] >>> object1

array ["a"] >>> object1

Это означает индекс0 (целое число) и индекс a (строка) разыменовывает один и тот же объект в массиве.Я думаю, что для хранения объектов нам нужны коллекции, но как я могу получить доступ к свойству, которое я упомянул выше?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Создайте карту из строковых ключей для цифровых клавиш:

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 голос
/ 19 апреля 2011

Массивы поддерживают только индексы.

Похоже, вам нужно искать объект по индексу и по ключу. В этом случае я предлагаю вам две коллекции. По одному на каждый тип поиска.

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