«Ключ» хранится дважды в Java HashMap? - PullRequest
3 голосов
/ 19 августа 2011

Когда пара ключ-значение добавляется в HashMap в Java, чтобы определить местоположение сегмента для объекта значения, реализация хэш-карты использует hashCode объекта «ключ» и применяет к нему хеширование.И, наконец, пара ключ-значение сохраняется в корзине.Ключевой объект хранится таким образом, чтобы в случае коллизий объект можно было правильно найти.

Мой вопрос заключается в том, хранится ли объект «ключ» дважды в HashMap, один раз как ключ, а затем в контейнере, где пара ключ-значение хранится в связанном списке?

Ответы [ 4 ]

2 голосов
/ 19 августа 2011

номер

Прежде всего: HashMap и (на самом деле что-либо еще ) могут хранить ссылку только на некоторый объект, который вы передаете в него. Так что даже если , если хранить две ссылки на ключ, то для этого потребуется минимальная память.

Далее: фактическая реализация из HashMap не предписана стандартом Java, поэтому она может (и будет) варьироваться в зависимости от , какую JVM вы используете.

И, наконец, глядя на исходный код OpenJDK HashMap, класс Entry имеет ровно одну ссылку на ключ (в поле метких имен key), поэтому ключ хранится только один раз.

1 голос
/ 19 августа 2011

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

1 голос
/ 19 августа 2011

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

0 голосов
/ 19 августа 2011

Нет.Если вы хотите точно знать, как работает HashMap, вы можете посмотреть исходный код.В каталоге установки JDK должен быть файл с именем src.zip, содержащий исходный код Java всех классов и интерфейсов в стандартной библиотеке.

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