HashMap:线程不安全,并发情况下容易造成环形链表(扩容时),危险!!!
HashTable:原理和HashMap几乎一样,HashTable不允许key、value为null;
线程安全,但是代价很大,内部用synchronized,把整个哈希表加了一把大锁,get、put时都会进行加锁,在大并发量时,严重影响效率。
ConcurrentHashMap:线程安全,内部采用了"分段锁",主干数据采用了多个Segment数组组成,当同时竞争同一个Segment时,需要考虑线程同步问题。
注:
ConcurrentHashMap基本结构:
JDK7:Segment数组+HashEntry 数组+链表
JDK8:Node 数组 + 链表 / 红黑树