复习ConcurrentHashMap增删改查

本文详细解析了ConcurrentHashMap的put、remove和get操作。在put时,通过hash运算减少冲突,使用CAS添加元素,当链表达到一定长度时转为红黑树。remove操作中,通过hash定位并锁定槽点链表,查找并删除对应节点。get操作则根据key的hash值查找元素,遍历链表或红黑树进行精确匹配。
摘要由CSDN通过智能技术生成

ConcurrentHashMap  
⭐static final int spread(int h) {
        return (h ^ (h >>> 16)) & HASH_BITS;
    }
    对key进行hash运算,中心思想无非就是高位移向低位减少hash冲突
⭐public V put(K key, V value)
    1.首先会判断key与value是否为Null,如果为Null则抛异常;(这也是ConcurrentHashMap与HashMap的区别,ConcurrentHashMap不允许key或value为Null)
    2.通过hash码与ConcurrentHashMap的槽点长度进行模运算,找到槽点具体位置,判断该位置是否有元素
        如果没有元素,则通过CAS的方式将要添加的元素,放到该槽点位置;
        如果有元素,则拿到该槽点下面的链表,并且synchronized将该链表锁住,并且从头开始进行遍历,如果找到则将旧值进行替换,如果没找到则添加到链表尾部;
    3.最后判断该链表的长度是否大于等于8,如果大于等于8,则需要将链表转换成红黑树;
⭐public V remove(Object key)
    1.对要删除的key进行hash计算
    2.通过计算hash值与数组长度模运算找到槽点数组上的具体槽点位置
         2.1如果这个槽点上数据为NULL,则直接返回
         2.2如果这个槽点上有数据,那么将该槽点链上的链表或红黑树synchronized ()锁起来,最后从头到尾进行对比key是否相等,中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值