Какую структуру данных лучше всего использовать в Java для «многомерного» списка? - PullRequest
1 голос
/ 05 октября 2009

Мне нужна словарная структура данных, которая хранит информацию следующим образом:

key [value 1] [value 2] ...

Мне нужно иметь возможность найти заданное значение, указав ключ и значение, которое я хочу (количество значений является постоянным). Хеш-таблица - это первое, что пришло мне в голову, но я не думаю, что ее можно использовать для нескольких значений. Есть ли способ сделать это с помощью одной базы данных, вместо того, чтобы разбивать каждую пару ключ-значение в отдельный список (или хеш-таблицу)? Также я бы предпочел не использовать многомерный массив, так как количество записей заранее неизвестно. Спасибо

Ответы [ 4 ]

1 голос
/ 05 октября 2009

Я не уверен, что вы имеете в виду относительно списка значений и поиска заданного значения. Это в основном список ключей-пар «имя-значение»? Или вы хотите указать значения по индексу?

Если последнее, вы можете использовать HashMap, который содержит ArrayLists - я предполагаю, что эти значения являются String, и если бы ключ был также String, он бы выглядел примерно так:


    HashMap<String, ArrayList<String>> hkansDictionary = new HashMap<String, ArrayList<String>>();

    public String getValue (String key, int valueIdx) {
        ArrayList<String> valueSet = hkansDictionary.get(key);
        return valueSet.get(valueIdx);
    }

Если первое, вы можете использовать HashMap, который содержит HashMaps. Это было бы больше похоже на это:


    HashMap<String, HashMap<String, String>> hkansDictionary 
              = new HashMap<String, HashMap<String, String>>();
    ----
    public String getValue (String key, String name) {
        HashMap<String, String> valueSet = hkansDictionary.get(key);
            return valueSet.get(name);
    }
0 голосов
/ 17 марта 2011

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

Т.е., вы должны определить свой собственный put метод, который обрабатывает новое значение инициализация примерно так:

private static Map<String, List<USHCommandMap>> uSHCommandMaps = new HashMap<String, List<USHCommandMap>>();

public void putMemory() {

        if (!uSHCommandMaps.containsKey(getuAtom().getUAtomTypeName()))
            uSHCommandMaps.put(getuAtom().getUAtomTypeName(), new ArrayList<USHCommandMap>());

        uSHCommandMaps.get(getuAtom().getUAtomTypeName()).add(this);

    }
0 голосов
/ 05 октября 2009

Я бы использовал

Map<Key,ArrayList<String>> map = new HashMap<Key,ArrayList<String>>

где вы определяете ключ как

public class Key{
    private String key;
    private String value;
    //getters,setters,constructor

    //implement equals and hashcode and tostring
}

тогда вы можете сделать

Key myKey = new Key("value","key");
map.get(myKey);

, который возвращает список из N элементов

0 голосов
/ 05 октября 2009

Вы можете создать класс, содержащий два ключевых значения, которые вы хотите найти, реализовать equals () и hashcode () для проверки / объединения вызовов к базовым значениям, и использовать этот новый класс в качестве ключа вашей карты.

...