【ConcurrentHashMap】

HashMap 在我们日常的开发中使用频率最高的一个工具类之一,然而使用 HashMap 最大的问题之一就是它是线程不安全的,如果我们想要线程安全, 这时候就可以选择使用 ConcurrentHashMap,ConcurrentHashMap 和 HashMap 的功能是基本一样的,ConcurrentHashMap 是 HashMap 的线程安全版本。

putIfAbsent
主要是在向ConcurrentHashMap中添加键—值对的时候,它会先判断该键值对是否已经存在。
如果不存在(新的entry),那么会向map中添加该键值对,并返回null。
如果已经存在,那么不会覆盖已有的值,直接返回已经存在的值。

computeIfAbsent:如果不存在则初始化
computeIfAbsent方法的作用是如果key值不存在,则初始化value,它分为两种情况

如果key存在,不作任何处理。
如果key不存在,执行后面的函数表达式,并将结果作为value放入。
value的数值也会对执行结果造成影响,如果value不为null,则存储成功。如果value为null,则返回null,因为ConcurrentHashMap的value不能为null

map.computeIfAbsent("",k->{
    return 1;
});

computeIfPresent:如果存在则修改
computeIfPresent方法的作用是如果key存在,则修改对应的value,它分为两种情况

如果key不存在,则将返回null。
如果key存在,则将修改key和对应value的数值,value根据函数表达式结果决定。
value的数值也会对执行结果造成影响,如果value不为null,则存储成功。如果value为null,则将当前的key-value删除,相当于执行了一次remove(key),如果函数式异常,则不会影响到原key-value

map.computeIfPresent("",(k,v)->{
   return 1;
});

compute:无论是否存在,都将数值赋予
compute方法相当于computeIfPresent与computeIfAbsent的结合体,它分为两种情况

如果key不存在,则将初始化对应的key-value
如果key存在,则修改key-value的对应数值

map.computeIfPresent("",(k,v)->{ 
   return (v == null) ? 1 : v+1;
});

put(K,V) - 向map中插入key/value 键值对数据
putAll(map) - 把另一个map中的所有entries插入到当前的map中
putIfAbsent(K,V) - 向map中插入key/value 键值对数据,如果该键值对的key在map不存在则插入数据,否则不做操作。

entrySet() -获取 map中key/value 键值对集合
keySet()- 获取map中所有的key的集合
values()- 获取map中所有的value的集合

get() - 获取指定key元素的value值,如果key不存在返回null
getOrDefault() - 获取指定key元素的value值,如果key不存在返回一个指定的默认值

remove(key) - 根据指定的key删除map中的元素,并将该元素返回
remove(key, value) - 只有当map中存在指定的键映射到指定的值时,才会从map中删除条目,并返回一个布尔值。返回true表示删除成功,否则表示map中没有这个键值对。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值