Я пытаюсь этот кодХэш записи Карта столкновения
Map headers=new HashMap();
headers.put("X-Capillary-Relay","abcd");
headers.put("Message-ID","abcd");
Теперь, когда я делаю get
для любой из клавиш его работает отлично. Однако я вижу странное явление в отладчике Eclipse. Когда я отладки и зайти внутрь переменных и проверить внутри table
входа в первый я вижу эту
->table
--->[4]
------>key:X-Capillary-Relay
...........
Однако после отладки через 2-й линии я получаю
->table
--->[4]
------>key:Message-ID
...........
Вместо того, чтобы создать новую запись его перезаписывает существующий ключ. Для любого другого ключа эта перезапись не возникает. Размер карты показан 2. и get
работает для обоих ключей. Итак, в чем причина этого несоответствия в отладчике eclipse. Это проблема затмения? Или проблема хеширования. Хэш-код отличается для двух клавиш.
Пока это работает, проблем нет или нет? У карты не будет отдельного ведра для каждого хэш-значения, поэтому нет проблем, если оба они окажутся в одном и том же ковше. Также я уверен, что создается новая запись - как бы вы могли получить оба значения с карты в противном случае? – Axel
Если работа с кодом и хеши разные, но отладчик Eclipse неверно отображает содержимое карты, это может показаться проблемой с отладчиком. – slarge
Я предлагаю рассматривать HashMap как черный ящик - пока вы понимаете, что он делает, вам не нужно понимать, как оно это делает. (НО, если вы используете когда-либо объекты в качестве ключей, DO реализуйте hashCode() и equals()) – NickJ