hashmap总结 -- 参考文章版

目录

底层原理

高并发下的hashmap

总结


底层原理:

https://zhuanlan.zhihu.com/p/78079598

1、底层原理:put、get;

2、为甚hashMap的长度要为2的幂次;


高并发下的hashmap:

https://zhuanlan.zhihu.com/p/81587796(解析详细)

1、Hashmap在插入元素过多的时候需要进行Resize,Resize的条件是

HashMap.Size >= Capacity * LoadFactor。

2、Hashmap的Resize包含扩容和ReHash两个步骤,ReHash在并发的情况下可能会形成链表环(本质是因为1.7版本put采用的头插法。因为作者考虑到后插入的元素更可能先被用到,头插就更方便get,提高效率,不过反而造成了线程不安全。)

扫描二维码关注公众号,回复: 11739563 查看本文章

总结

HashMap之所以在并发下的扩容造成死循环,是因为,多个线程并发进行时,因为一个线程先完成了扩容,将原的链表重新散列到自己的表中,并且链表变成了倒序,后一个线程再扩容时,又进行自己的散列,再次将倒序链表变为正序链表。于是形成了一个环形链表,当get的时候,造成死循环。

虽然在JDK1.8中,Java的开发小组修正了这个问题,但是HashMap始终存在着其他的线程安全问题。所以在并发情况下,我们应该使用HastTable或者ConcurrentHashMap来代替HashMap。

猜你喜欢

转载自blog.csdn.net/Longtermevolution/article/details/108382538