在java中使用HashMap <object,object>时,键的类型是什么?</objects,objects>

时间:2011-03-03 11:50:49

标签: java hashmap

使用HashMap时,hashmap会将整个objectA存储为键,还是只使用objectA.hashCode()作为键,从而产生int-&gt; ObjectB的实际hashmap?

4 个答案:

答案 0 :(得分:5)

它将在插入时存储对密钥哈希码的引用。

这个想法是当你尝试按键查找条目时,哈希码用于快速到达候选键的列表,然后每个通过平等来检查候选人。

答案 1 :(得分:2)

  

使用HashMap时,hashmap会将整个objectA存储为键

是整个对象为关键

它将在内部使用密钥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       }

答案 2 :(得分:2)

它将使用整个对象。

答案 3 :(得分:1)

通常它使用散列来查找条目,但条目本身包含值和键。这样你就可以调用HashMap#values()来获得一个包含键的Set<Entry<key_type, value_type>>

相关问题