Как рассчитывается хеш-код Java String для объектов - PullRequest
0 голосов
/ 26 сентября 2019

"Sun" и "TWO" дают одинаковые значения hashCode () в Java.

Как получается, что выводит:

HashMap<String, Integer> map = new HashMap<>();
map.put("Sun", 1);
System.out.println(map.get("TWO"));

выводит: null

, но

HashMap<Integer, Integer> map = new HashMap<>();
map.put("Sun".hashCode(), 1);
System.out.println(map.get("TWO".hashCode()));

выводит: 1

Разве hashmap не вызывает hashCode () для строки "Sun", чтобы использовать ее в качестве ключа?

1 Ответ

4 голосов
/ 26 сентября 2019

Когда объект вставляется в HashMap, он использует метод hashCode, чтобы решить, где его хранить.Но hashCode не предназначены для того, чтобы быть полностью уникальными.Могут быть разные значения, которые выдают одинаковые выходные данные, но не равны, поэтому HashMap будет иметь какой-то метод борьбы с подобными коллизиями.get вернет значение, только если ключи имеют одинаковые hashCode и равны при использовании метода equals."Sun" не равно "TWO", но хеш-код "Sun" делает равным хэш-коду "TWO".

Из документация :

если эта карта содержит отображение ключа k на значение v, такое что (key == null? K == null: key.equals (k)), то этот метод возвращает v;в противном случае возвращается ноль.(Может быть не более одного такого отображения.)

Таким образом, равенство, а не хеш-код, определяет, что будет возвращено.По сути, хеш-код - это просто оптимизация, позволяющая значительно ускорить процесс поиска объектов, которые могут быть равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...