本来想写一个关于 HashMap与ConCurrenHashMap的博客,后来看到已经有个人总结得非常好,特此引用
HashMap与ConCurrenHashMap
但是,需要先说明HashMap的缺点:
大家都知道,HashMap通过计算hash值实现快速查找的的功能,所以查找效率高。但是HashMap为此付出的代价是啥? 我面试过程中面试官提到了两种极端问题
- HashMap线程不安全的,多线程中使用HashMap会出现线程安全问题。
- 假如每次计算hash值都是同一个值。HashMap底层是通过数组和链表的数据结构实现的,通过拉链来解决hash冲突的,如果每次计算的hash值都是同一个,那么会造成链表中长度过长的问题。
- 每次计算hash值都是不同的值。每次计算的hash值都不一样,HashMap中的数组会不断地扩容,造成HashMap的容量不断增大。
之后,为了解决这些问题,jdk1.8后使用红黑树替代了链表。