直接实现Map的Map类 有三个 HashMap HashTable LinkedHashMap
同时提供了ConcurrentMap和SortedMap两个接口
ConcurrentMap 实现类里面有ConcurrentHashMap 这个线程安全的HashMap
ConcurrentHashMap的扩容因子为0.75 扩容使用分段锁后续学习
默认大小16
jdk8 中我们发现一个问题
ConcurrentHashMap使用CAS来保证线程安全
HashMap : hashMap的扩容因子和默认table的size都是为16 扩容倍数是两倍
两倍的位置
数据迁移table共享
此处在高并发下可能造成数据丢失覆盖等等问题
resize()方法因为多个线程不可见所以造成数据丢失情况的发生
可能原因并发赋值被修改
已遍历新增元素会丢失
新表被覆盖
jdk8不可能在发生死链问题了
之前问题已经修复
多线程同时put还是还是会造成数据丢失
TreeMap
HashMap通过Equals和HashCode来实现去重的
而TreeMap则是通过Comparable或者Comparator来实现去重的
HashMap去重代码
HashTable
线程安全但是synchronized效率低下基本废弃
hashTable扩容采用的 oldCapacity*2+1
Map集合采用负载因子均为0.75
初始容量为11
LinkedHashMap
初始容量和负载因子
LinkedHashMap并未重写父类HashMap的put方法,
LinkedHashMap具体实现