Хэш-карта с несколькими значениями [дубликат]


На этот вопрос уже есть ответ здесь:

Я хочу реализовать хэш-таблицу с несколькими значениями в java i. e

// if sample is a hashmap
sample.put(1,1);
sample.put(1,2);

И sample.get(1); вернут 2 значения.

Как я могу этого достичь?

3 2

3 ответа:

Вместо этого можно использовать Multimap. Он сохраняет несколько значений для ключа в списке. Существуют реализации в commons-коллекциях и в Guava.

Multimap<String, String> multimap = ArrayListMultimap.create();   
multimap.put("ducks", "Huey");
multimap.put("ducks", "Dewey");
multimap.put("ducks", "Louie");
Collection<String> ducks = multimap.get("ducks");
System.out.println(ducks); // [Huey, Dewey, Louie]

Это похоже на использование хэш-карты, где значения являются списками, но вам не нужно явно создавать списки.

Тот же пример, выполненный способом do-it-yourself, выглядит следующим образом:

Map<String, List<String>> map = new HashMap<>();
map.put("ducks", new ArrayList<String>());
map.get("ducks").add("Huey");
map.get("ducks").add("Dewey");
map.get("ducks").add("Louie");
// or as an alternative to the prev 4 lines:
// map.put("ducks", new ArrayList<String>(
//     new String[] {"Huey", "Dewey", "Louie"}));
Collection<String> ducks = map.get("ducks");
System.out.println(ducks); // [Huey, Dewey, Louie]
Обратите внимание, что вы можете использовать Multimap в качестве компоновщика и вызвать asMap для возврата карты.

Попробуйте HashMap<Key, List<Value>> вам нужно будет управлять списком, создавая, если он еще не существует, и добавляя к нему, если вам нужно.

Гуава также обеспечивает реализацию Multimap

Сделайте это так

Map<String, List> map = new HashMap<String, List>();
List listOne = new ArrayList();
for(int i=0;i<4;i++){
    listOne.add(i);
}
List listTwo = new ArrayList();
for(int i=4;i<6;i++){
    listTwo.add(i);
}
map.put("listOne",listOne);
map.put("listTwo",listTwo);

Или вы можете даже использовать Multimap гуавы