问题系列:
一、 hashMap、ConcurrentHashMap、hashTable区别?
1、先说HashMap和HashTable区别
主要区别HashMap线程是不安全的,HashTable线程是安全的
1、继承不同,HashMap继承于AbstractMap,HashTable继承于Dictionary
2、它们存储的键值对区别:HashMap的键可以有一个为null,而值可以多个为null
HashTable中 键值对皆不可为空
3、它们的扩容方式是不一样的,HashMap默认的初始化大小是16,装载因子是0.75,并且扩容为2的指数;而HashTabe默认初始大小为11,扩容为2*old+1;
4、hash值的使用不同,hashtable直接取余,hashMap通过对hash值右移16位做异或操作,并和数组长度-1的方式获取index。
5、HashTable为整个上锁
2、ConcurrentHashMap和HashMap区别:
1、ConcurrentHashMap线程为安全的,加锁机制为分段加锁,锁住的是数组中的元素。情况如下:
(1)如果未出现hash冲突,也就是此index上无元素存在,就会进行CAS的方式添加元素
(2)出现hash冲突的情况下,使用synchronized关键字对元素加锁
key相同,直接用新元素覆盖旧元素
元素未链表性质,直接将新元素挂在链表尾部,此情况时候
如果数组的元素是红黑树,将新的元素加入到红黑树
综上所述,ConcurrentHashMap性能比HashMap性能更好。