Hashmap,Hashtable,Concurrenthashmap之间的区别

Hashmap,Hashtable,Concurrenthashmap之间的区别

HashMap

继承了AbstractMap,他根据键的hashcode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历的顺序不确定,而且线程不安全,就是在任意时刻可以有多个线程同时写hashmap,导致数据不一致,例如进行put操作,会导致CPU使用率接近100%。

Hashmap最多只允许一条记录的键为null,允许多条记录的值为null。

当数据总量没有超过8组的时候,使用数组加链表的方式来进行存储,一旦出现拉链过长,则会严重影响HashMap的性能。于是,在JDK1.8版本中,对数据结构做了进一步的优化,引入了红黑树。而当链表长度太长(默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特点提高HashMap的性能

Hashtable (不怎么用)

继承自Dictionary类,并且(get/put的相关操作)加了synchronized,相当如加了一把大锁,所以线程安全的,任意时间只能一个线程写,导致速度很慢。
不允许key和value为null

LinkedHashMap

继承了hashmap,就是在hashmap的基础上,增加了有序排序,保存了记录的插入顺序,但虚度降低。

ConcurrentHashMap

继承自abstractmap,为了应对hashmap在并发环境下不安全而诞生的,大量利用了volatile(不稳定的),final,CAS(compare and swap比较交换) 减少锁对性能的影响。

你可能感兴趣的:(Hashmap,Hashtable,Concurrenthashmap之间的区别)