Словарь класса - PullRequest
3 голосов
/ 27 июня 2009

Возможно ли иметь несколько значений для одного ключа в классе словаря Java?

Ответы [ 4 ]

3 голосов
/ 27 июня 2009

Во-первых, в отношении класса словаря: этот класс считается устаревшим, документация рекомендует использовать вместо него Map.

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

Возможно, вы захотите использовать MultiMap из коллекций Apache или из коллекций Google. Хотя я лично являюсь поклонником коллекций apache, они на самом деле не поддерживают дженерики, поэтому мультикарта Google может быть безопаснее.

2 голосов
/ 27 июня 2009

Вы должны взглянуть на класс MultiMap из коллекций Apache Commons

2 голосов
/ 27 июня 2009

Вы можете использовать обычный Map и иметь значения Collection s:

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();

map.put(0, Arrays.asList("foo", "bar"));
map.put(1, new ArrayList<String>());

map.get(1).add("blag");

Или вы можете использовать MultiMap из Apache Commons Collections .

A MultiMap - это Map с немного другой семантикой. Помещение значения в карту добавит значение к Collection в этом ключе. Получение значения вернет Collection, содержащее все значения, назначенные этой клавише.

Например:

MultiMap mhm = new MultiHashMap();
mhm.put(key, "A");
mhm.put(key, "B");
mhm.put(key, "C");
Collection coll = (Collection) mhm.get(key);

coll будет коллекцией, содержащей «A», «B», «C».

(К сожалению, MultiMap не использует дженерики.)

2 голосов
/ 27 июня 2009

Конечно. Используйте список в качестве значения.

...