ConcurrentHashMap HashMap HashTable
HashTable 比HashMap低 因为线程安全 要比较同步锁
HashTable 1丶是一个包含单向链的二维数组,table数组中是entry《K,V》存储,entry对象
2丶Values不能为空
3丶 线程安全 所有的方法均包含 synchronized 修饰
HashMap 1 相当于Hashtable升级版
2 可以放入空值
3 基于Hash表(根据关键码值直接进行访问数据结构 )
4 线程不安全
ConCurrentHashMap : synchronized 是针对整张Hash表,即每次锁住整张表让线程独占,线程安全的背后是巨大的浪费
TreeMap 1 有序的存储
2 自己可以排序 让key值 的类 实现comparable接口
为什么我们需要ConcurrentHashMap和CopyOnWriteArrayList
同步的集合类(Hashtable和Vector)
同步的封装类(使用Collections.synchronizedMap()方法和Collections.synchronizedList()方法返回的对象)可以创建出线程安全的Map和List
ConcurrentHashMap和Hashtable的区别
Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap仅仅锁定map的某个部分,而Hashtable则会锁定整个map