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)
通常发生?
散列映射的常用方法是使用多个bin(或桶),您可以根据其哈希码为新键选择bin.
问题是几个键可能会到达相同的bin,因为bin的数量有限.bin是一个列表.所以你可以在O(1)时间内到达bin,但是你必须在列表中线性搜索.如果该列表变长,则会降低哈希表的性能.
因此,HashMap如果bin变得太长,那么当前的实现通过改变bin结构来改善这个问题.如果bin已经有超过8个条目,并且bin的数量超过64,则bin将从列表转换为红黑树.红黑树是平衡搜索树.这意味着搜索它将是O(log n),这比O(n)更好.
所以现在,当你在bin中放入一个值时,你必须检查它是哪个bin.如果它是一个普通列表,添加到列表中,如果它是一棵树,添加到树并平衡它.
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |