方法putTreeVal()在HashMap JDK8中

时间:2015-09-27 21:00:17

标签: java hashmap java-8

什么时候通常在HashMap中使用方法putTreeVal()

这种情况是什么时候,在调用put(K key, V value)之后:

else if (p instanceof TreeNode)
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);

通常会发生?

1 个答案:

答案 0 :(得分:6)

哈希映射的常用方法是使用多个bin(或桶),根据哈希码为新键选择bin。

问题是几个键可能会到达同一个bin,因为bin的数量有限。 bin是一个列表。所以你可以在O(1)时间内到达bin,但是你必须在列表中线性搜索。如果该列表变长,则会降低哈希表的性能。

因此,HashMap的当前实现通过在bin变得太长时更改bin结构来改善此问题。如果bin已经有超过8个条目,并且bin的数量超过64,则bin将从列表转换为红黑树。红黑树是平衡搜索树。这意味着搜索它将是O(log n),这比O(n)更好。

现在,当你在bin中放入一个值时,你必须检查它是哪个bin。如果它是一个普通列表,请添加到列表中,如果它是一棵树,则添加到树中并进行平衡。