HashMap知识

HashMap的扩容机制---resize() - 割肉机 - 博客园

Java源码分析:HashMap 1.8 相对于1.7 到底更新了什么? -

在hashmap数组扩容之后,最消耗性能的点就出现了:原数组中的数据必须重新计算其在新数组中的位置,并放进去,这就是resize。 

Hashtable与ConcurrentHashMap

全锁 分段锁  

给定的默认容量为 16,负载因子为 0.75。Map 在使用过程中不断的往里面存放数据,当数量达到了16 * 0.75 = 12就需要将当前 16 的容量进行扩容,而扩容这个过程涉及到 rehash、复制数据等操作,所以非常消耗性能。

因此通常建议能提前预估 HashMap 的大小最好,尽量的减少扩容带来的性能损耗。

ConcurrentHashMap 1.7

HashMap知识_第1张图片

ConcurrentHashMap 1.8

HashMap知识_第2张图片

1.8 在 1.7 的数据结构上做了大的改动,采用红黑树之后可以保证查询效率(O(logn)),甚至取消了 ReentrantLock 改为了 synchronized,这样可以看出在新版的 JDK 中对 synchronized 优化是很到位的。

你可能感兴趣的:(HashMap知识)