Проблемы с использованием HashMap

Я пытаюсь решить аналитическую задачу только для изучения структур данных. Мое сомнение с HashTable на Яве.

У меня есть HashMap

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

И это HashMap имеет меньше ключей, но некоторые из этих ключей дублируются.

map.put('k', 1);
map.put('k', 2);

И так далее...

Мой вопрос, когда я собираюсь удалить ключ к HashMap. Некоторые из этих ключей тоже дублируются.

Посмотрим.

map.remove('k');

Я полагаю, что в этом случае он удалит все значения с ключом 'k' или удалит только первое найденное.

Что произойдет в этом случае? Я немного запутался.

Спасибо за вашу помощь!!

5 ответов

Решение

В HashMap (или же HashTable) у вас могут быть только УНИКАЛЬНЫЕ КЛЮЧИ, у вас не может быть разных значений, назначенных одной и той же клавише. В вашем коде вы пытаетесь поместить 2 разных значения с одним и тем же ключом:

map.put('k', 1);
map.put('k', 2);

Угадайте, что будет не 2 записи, а только 1, последняя, ​​которая заменит предыдущую, так как они имеют одинаковый ключ - 'k'. Следовательно, map.remove('k'); удалит все, что является одной единственной записью, а не двумя.

Есть несколько вещей, которые вы спрашиваете. Давайте ответим на все из них.

  1. HashTable - это не то же самое, что HashMap. Тем не менее, hashTable очень похож на HashMap. Самое большое различие между ними заключается в том, что в HashTable каждый метод синхронизирован, что делает чтение / запись чрезвычайно дорогостоящим. Методы HashMap не синхронизированы. HashTable более или менее устарел, и люди, пишущие новый код, должны избегать использования HashTable.

  2. В HashMap ключи всегда уникальны. т.е. не может быть 2 записи с одним и тем же ключом. В вашем примере

map.put('k', 1);

Это создаст запись на карте, ключ которой равен "k", а значение равно 1.

Затем вы делаете

map.put('k', 2);

Это не создаст другую запись с ключом 'k' и значением 2. Это перезапишет значение самой первой записи. Таким образом, у вас будет только одна запись для ключа 'k', значение которого теперь равно 2 (а не 1)

Теперь, я думаю, что понимание удаления () будет легко. Когда вы удаляете (ключ), он пытается удалить единственную запись для этого ключа.

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

Для более подробной информации вы можете прочитать документацию здесь.

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

использовать

      map.putIfAbsent('k',2);

вместо

      map.put('k', 2);
Другие вопросы по тегам