static class Node implements Map.Entry {
final int hash;
final K key;
V value;
Node next;
}
java中HashMap的内部实现中,Node存储的是hash。
为什么使用它?我认为没有必要这样做。
最佳答案
我认为主要原因是为了提高性能。对于某些对象来说,调用equals()
的成本可能很高。在Short-circuit evaluation的帮助下,如果哈希值尚未匹配,jvm 不必调用 equals()
这就是 getNode
的实现方式(在迭代存储桶来搜索节点时调用。
if (first.hash == hash &&
((k = first.key) == key || (key != null && key.equals(k))))
//( Same HashCode AND ((Same Object reference of the Key) OR (equal method says True in Key Object) )
编辑:正如@moreON提到的,重新散列也需要散列
关于java - HashMap的Node中存储hash的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58003674/