Java - 为什么HashMap中的哈希和键是最终的

时间:2015-12-11 10:50:20

标签: java hashmap

在java中,HashMap内部使用实现Node<K,V>的{​​{1}}并具有以下结构:

Map.Entry<K,V>

我想知道为什么static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next; hash key以及finalvalue不是?

3 个答案:

答案 0 :(得分:2)

哈希和键定义了这个Node在HashMap的数据结构中的位置,因此一旦插入Node就无法更改这些内容非常重要,以便Node可以再次找到。

存储的实际值与HashMap的观点无关;我想如果您更改与密钥关联的值,则可能需要稍微优化,而不需要创建新的Node

如果您在地图中添加/删除元素,则下一个节点可能会更改。

答案 1 :(得分:2)

哈希 - 这是最终的,因为一旦创建了一个带有哈希值的节点,它甚至不会意外地改变。

密钥 - 只是将哈希作为最终版本没有意义,因为哈希是基于密钥的。因此,哈希和密钥都应该是最终的,原因很明显。

- 节点中的值总是可以更改,因此没有必要使其成为最终值。

next - 这只是一个指针,在hashmap数据结构中,接下来可以指向不同的地图条目,因为它增长(插入/删除)或重组(重新散列)。所以再没有必要让它成为最终的。但请记住,节点/条目包含的密钥永远不会改变。

答案 2 :(得分:0)

它可以处理重新散列。但是,我不太清楚如何。