使用HashMap时,hashmap会将整个objectA存储为键,还是只使用objectA.hashCode()作为键,从而产生int-> ObjectB的实际hashmap?
答案 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>>
。