HashMap中putTreeVal()
一般在什么时候使用?
这种情况何时发生,在调用 put(K key, V value)
之后:
else if (p instanceof TreeNode)
e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
通常会发生什么?
最佳答案
HashMap 的通常工作方式是拥有多个容器(或桶),您可以根据其哈希代码为新 key 选择容器。
问题是多个 key 可能会进入同一个箱子,因为箱子数量有限。 bin 是一个列表。所以你可以在 O(1) 时间内到达 bin,但是你必须在列表中线性搜索。如果该列表变长,则会降低哈希表的性能。
因此,HashMap
的当前实现通过在 bin 变得太长时更改 bin 结构来改善这个问题。如果 bin 已经有超过 8 个条目,并且 bin 的数量超过 64,则将 bin 从列表转换为红黑树。红黑树是平衡搜索树。这意味着搜索它将是 O(log n),这比 O(n) 更可取。
所以现在,当您将一个值放入一个 bin 时,您必须检查它是哪个 bin。如果是普通列表,则添加到列表中,如果是树,则添加到树中并平衡它。
关于java - HashMap JDK8 中的方法 putTreeVal(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32812789/