Проблемы с использованием 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');
удалит все, что является одной единственной записью, а не двумя.
Есть несколько вещей, которые вы спрашиваете. Давайте ответим на все из них.
HashTable - это не то же самое, что HashMap. Тем не менее, hashTable очень похож на HashMap. Самое большое различие между ними заключается в том, что в HashTable каждый метод синхронизирован, что делает чтение / запись чрезвычайно дорогостоящим. Методы HashMap не синхронизированы. HashTable более или менее устарел, и люди, пишущие новый код, должны избегать использования HashTable.
В HashMap ключи всегда уникальны. т.е. не может быть 2 записи с одним и тем же ключом. В вашем примере
map.put('k', 1);
Это создаст запись на карте, ключ которой равен "k", а значение равно 1.
Затем вы делаете
map.put('k', 2);
Это не создаст другую запись с ключом 'k' и значением 2. Это перезапишет значение самой первой записи. Таким образом, у вас будет только одна запись для ключа 'k', значение которого теперь равно 2 (а не 1)
Теперь, я думаю, что понимание удаления () будет легко. Когда вы удаляете (ключ), он пытается удалить единственную запись для этого ключа.
По определению HashMap
в Java все ключи хранятся однозначно. Проще говоря, когда мы пытаемся поместить больше записей с тем же ключом, он переопределит ранее определенное значение для этого ключа. Следовательно, при удалении ключа после установки нескольких значений для этого ключа, ключ больше не будет существовать в HashMap
,
Для более подробной информации вы можете прочитать документацию здесь.
В HashMap ключи будут уникальными, поэтому он не будет добавлять несколько раз ключ K . когда вы удаляете ключ "K", он удаляет уникальный ключ "K" из хеш-таблицы.