При использовании HashMap <ObjectA, ObjectB> в Java, какой тип ключа? - PullRequest
1 голос
/ 03 марта 2011

При использовании HashMap, хэш-карта будет хранить весь объект A в качестве ключа или будет использовать только objectA.hashCode () в качестве ключа, что приведет к фактическому хэш-файлу int-> ObjectB?

Ответы [ 4 ]

5 голосов
/ 03 марта 2011

Будет храниться ссылка на ключ и хеш-код во время вставки.

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

2 голосов
/ 03 марта 2011

Будет использоваться весь объект.

2 голосов
/ 03 марта 2011

При использовании HashMap, hashmap сохранит весь объект A как ключ

Да, весь объект в качестве ключа

Он будет использовать внутренние ключи hashCode() для хранения Value

Давайте посмотрим на код

@Override
  461       public V get(Object key) {
  462           Entry<K, V> m = getEntry(key);
  463           if (m != null) {
  464               return m.value;
  465           }
  466           return null;
  467       }
  468   
  469       final Entry<K, V> getEntry(Object key) {
  470           Entry<K, V> m;
  471           if (key == null) {
  472               m = findNullKeyEntry();
  473           } else {
  474               int hash = computeHashCode(key);
  475               int index = hash & (elementData.length - 1);
  476               m = findNonNullKeyEntry(key, index, hash);
  477           }
  478           return m;
  479       }

           final Entry<K,V> findNonNullKeyEntry(Object key, int index, int keyHash) {
  482           Entry<K,V> m = elementData[index];
  483           while (m != null
  484                   && (m.origKeyHash != keyHash || !areEqualKeys(key, m.key))) {
  485               m = m.next;
  486           }
  487           return m;
  488       }
1 голос
/ 03 марта 2011

Обычно для поиска записи используется хеш, но сама запись содержит и значение, и ключ. Таким образом, вы можете вызвать HashMap # values ​​(), чтобы получить Set<Entry<key_type, value_type>>, который также содержит ключи.

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