Как включить дубликаты ключей в HashMap?
Мне нужно связать и несколько ключей в наборе ключей. Я пробовал это:
LinkedHashMap<Integer, String> map = new LinkedHashMap< Integer,String>();
map.put( -1505711364,"4");
map.put(294357273, "15"); map.put(-1593134417, "28"); map.put(-1231165758, "45");
map.put(121046798, "58");
map.put(294357273, "71"); map.put(-1593134417, "82"); map.put(-1231165758, "95");
map.put(121046798, "108");
Мне нужны дубликаты ключей, порядок которых сохранен. Каков способ сделать это?
Ответы
Ответ 1
У вас не может быть дубликатов ключей в Map
. Вы можете создать Map<Key, List<Value>>
или, если можете, использовать Guava Multimap
.
Multimap<Integer, String> multimap = ArrayListMultimap.create();
multimap.put(1, "rohit");
multimap.put(1, "jain");
System.out.println(multimap.get(1)); // Prints - [rohit, jain]
И затем вы можете получить java.util.Map
с помощью метода Multimap#asMap()
.
Ответ 2
Используйте Map<Integer, List<String>>
:
Map<Integer, List<String>> map = new LinkedHashMap< Integer, List<String>>();
map.put(-1505711364, new ArrayList<>(Arrays.asList("4")));
map.put(294357273, new ArrayList<>(Arrays.asList("15", "71")));
//...
Чтобы добавить новую пару ключ/значение на этой карте:
public void add(Integer key, String newValue) {
List<String> currentValue = map.get(key);
if (currentValue == null) {
currentValue = new ArrayList<String>();
map.put(key, currentValue);
}
currentValue.add(newValue);
}
Ответ 3
Map
не поддерживает дубликаты ключей. вы можете использовать коллекцию как значение против того же ключа.
Связывает указанное значение с указанным ключом на этой карте (дополнительная операция). Если на карте ранее содержалось отображение для ключ, старое значение заменяется указанным значением.
Документация
вы можете использовать любую реализацию List
или Set
в соответствии с вашим требованием.
Если ваши значения могут быть также дублируемыми, вы можете пойти с ArrayList
или LinkedList
, в случае, если значения уникальны, вы можете использовать HashSet
или TreeSet
и т.д.
Также в сборнике google guava Multimap
, это набор, который отображает ключи к значениям, аналогичные Map, но в которых каждый ключ может быть связан с несколькими значениями. Вы можете визуализировать содержимое мультимазки либо как карту от ключей к непустым наборам значений:
a → 1, 2
b → 3
Пример -
ListMultimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("a", "1");
multimap.put("a", "2");
multimap.put("c", "3");
Ответ 4
hashMaps
не может быть дубликатов ключей. Тем не менее, вы можете создать карту со значениями списка:
Map<Integer, List<String>>
Однако использование этого подхода будет иметь последствия для производительности.