方法putTreeVal()在HashMap JDK8中

Vit*_*han 5 java hashmap java-8

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

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

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

通常发生?

Rea*_*tic 6

散列映射的常用方法是使用多个bin(或桶),您可以根据其哈希码为新键选择bin.

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

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

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