hashMap,hashTable,TreeMap,concurrentHashMap区别
hashMap:
基于哈希表实现
treeMap:
基于二叉树实现,适用于排序
hashTable:
底层还是HashMap,在方法上加了同步
concurrentHashMap:
java7底层通过Segment(ReentrantLock) +分段锁实现,一个Segment负责一组数据;java8通过cas来实现线程安全
hashMap的key和value都可以为null,hashTable和concrrentHashMap却都不能。
因为单线程中,map可以通过map.contains(key)判断null是他的值还是未找到key。当多线程使用map.get(key)时返回为null,无法判断key是不存在还是值为空,多线程中,可能再两次调用间已经发生改变。