java - HashMap JDK8 中的方法 putTreeVal()

标签 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);

通常会发生什么?

最佳答案

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/

相关文章:

java - 使用 iText 的 pdf 交互式表单的外观问题

java - SparseArray 上 putAll 的等效方法

java - 函数 Completable Future 上的 gradle 不兼容错误

java - 使用旧版本的 java 发布 java 程序的首选方法是什么?

Java 流 API

java - Android 将值传递给另一个 Activity

java - JMX 通知设计

java - 在 Spring 中使用 Mockito 模拟属性文件

java - 3维不同类型 map 或列表: List(ID=integer) of List(ID=integer) of int[]

java - 如何让第二次存在的时间为2左右?