什么时候通常在HashMap中使用方法putTreeVal()
?
这种情况是什么时候,在调用put(K key, V value)
之后:
else if (p instanceof TreeNode)
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
通常会发生?
答案 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。如果它是一个普通列表,请添加到列表中,如果它是一棵树,则添加到树中并进行平衡。