Что происходит, когда дублирующийся ключ помещается в HashMap?

Хорошей функцией, которая не используется часто, является блок try-catch всей функции:

int Function()
try
{
   // do something here
   return 42;
}
catch(...)
{
   return -1;
}

Основное использование должно было бы перевести исключение в другой класс исключений и перебросок, или переводить между исключениями и основанной на возврате обработкой кода ошибки.

260
задан Palec 9 January 2016 в 00:29
поделиться

3 ответа

На ваш вопрос, была ли карта похожа на ведро: нет.

Это похоже на список с парами имя = значение , тогда как имя не 'не обязательно должно быть String (хотя может).

Чтобы получить элемент, вы передаете свой ключ методу get (), который возвращает вам назначенный объект взамен.

И Карта Hash означает, что если вы пытаетесь получить свой объект с помощью метода get, он не будет сравнивать реальный объект с тем, который вы предоставили, потому что ему потребуется выполнить итерацию по его списку и compare () ключ, который вы предоставили с текущим элементом.

Это было бы неэффективно. Вместо этого, независимо от того, из чего состоит ваш объект, он вычисляет так называемый хэш-код из обоих объектов и сравнивает их. Это' Намного проще сравнивать два int s вместо двух целых (возможно, очень сложных) объектов. Вы можете представить хэш-код как сводку, имеющую предопределенную длину (int), поэтому он не уникален и имеет коллизии. Вы найдете правила для хэш-кода в документации, на которую я вставил ссылку.

Если вы хотите узнать больше об этом, вы можете взглянуть на статьи на javapractices.com и technofundo.com

с уважением

4
ответ дан 23 November 2019 в 02:37
поделиться

По определению, команда put заменяет предыдущее значение, связанное с данным ключом на карте (концептуально как операция индексирования массива для примитивных типов).

map просто отбрасывает ссылку на значение. Если ничто другое не содержит ссылку на объект, этот объект становится пригодным для сборки мусора. Кроме того, Java возвращает любое предыдущее значение, связанное с данным ключом (или null , если его нет), поэтому вы можете определить, что там было, и при необходимости сохранить ссылку.

Дополнительная информация здесь: HashMap Doc

296
ответ дан 23 November 2019 в 02:37
поделиться

Вы можете найти свой ответ в javadoc Map # put (K, V) (который фактически что-то возвращает):

 public V put (K key,
 Значение V)

Связывает указанное значение с указанным ключом на этой карте. (дополнительная операция). Если карта ранее содержал отображение для этот ключ, старое значение заменяется на указанное значение. (На карте м говорится содержать отображение для ключа k , если и только если m.containsKey (k) будет return true .)

Параметры:
key - ключ, с которым должно быть связано указанное значение.
value - значение, которое будет связано с указанным ключом .

Возвращает:
предыдущее значение, связанное с указанным ключом, или ноль , если не было отображение для ключа . (Возврат null также может указывать на то, что карта ранее связала null с указанным ключом , если реализация поддерживает значения null .)

Таким образом, если вы не присваиваете возвращаемое значение при вызове mymap.put («1», «строка») , оно становится не имеющим ссылки и, таким образом, подлежит сборке мусора.

75
ответ дан 23 November 2019 в 02:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: