java中的Map

直接实现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具体实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值