上海网站营,怎样免费做彩票网站,西安宏博网络科技有限公司,微信公众号网站导航怎么做#x1f49d;#x1f49d;#x1f49d;欢迎来到我的博客#xff0c;很高兴能够在这里和您见面#xff01;希望您在这里可以感受到一份轻松愉快的氛围#xff0c;不仅可以获得有趣的内容和知识#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学… 欢迎来到我的博客很高兴能够在这里和您见面希望您在这里可以感受到一份轻松愉快的氛围不仅可以获得有趣的内容和知识也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 ✨✨ 欢迎订阅本专栏 ✨✨ 博客目录 一.putIfAbsent1.基本介绍2.putIfAbsent 方法3.putIfAbsent 的并发安全性 二.getOrDefault1.getOrDefault 方法2.示例代码3.使用场景 一.putIfAbsent
1.基本介绍
在 Java 中putIfAbsent 和 getOrDefault 是用于 Map 接口的两个不同的方法下面分别解释 putIfAbsent 和 getOrDefault 的用法。
2.putIfAbsent 方法
putIfAbsent 方法用于向映射中添加键值对但仅在指定的键尚不存在时才添加。如果指定的键已经存在则不会执行添加操作。该方法常用于确保在并发环境中不会重复添加相同的键值对。以下是示例代码
import java.util.HashMap;
import java.util.Map;public class PutIfAbsentExample {public static void main(String[] args) {MapString, Integer map new HashMap();map.put(key1, 10);map.putIfAbsent(key1, 20); // 不会覆盖现有键值对map.putIfAbsent(key2, 30);System.out.println(map); // 输出: {key110, key230}}
}3.putIfAbsent 的并发安全性
putIfAbsent 方法在 Java 中通常用于并发环境中的 ConcurrentMap 实现例如 ConcurrentHashMap。这个方法的设计是为了在多线程环境下安全地执行添加操作确保在同一时间只有一个线程能够成功地将键值对添加到映射中。
在 ConcurrentHashMap 中putIfAbsent 方法使用了一种称为 “compare-and-swap”CAS的机制来确保原子性。CAS 是一种多线程同步的技术它比传统的锁定机制更轻量级。
在 putIfAbsent 方法中首先会尝试用给定的键检索值然后只有在该键不存在时才尝试添加。整个过程是原子性的因此在并发情况下多个线程可以同时调用 putIfAbsent 方法但只有一个线程最终会成功地将键值对添加到映射中。
以下是一个简单的示例演示了在并发情况下使用 ConcurrentHashMap 中的 putIfAbsent 方法
import java.util.concurrent.ConcurrentHashMap;public class ConcurrentExample {public static void main(String[] args) {ConcurrentHashMapString, Integer concurrentMap new ConcurrentHashMap();// 线程1尝试添加键值对new Thread(() - {Integer value concurrentMap.putIfAbsent(key, 1);System.out.println(Thread 1 - Added: value);}).start();// 线程2尝试添加相同的键值对new Thread(() - {Integer value concurrentMap.putIfAbsent(key, 2);System.out.println(Thread 2 - Added: value);}).start();}
}在这个例子中只有一个线程最终会成功地将键值对添加到映射中而另一个线程会得到 putIfAbsent 方法返回的已存在的值。
putIfAbsent 方法在 ConcurrentMap 中提供了一种并发安全的方式来添加元素适用于多线程环境。
二.getOrDefault
1.getOrDefault 方法
getOrDefault 方法用于获取指定键的值如果该键不存在则返回一个默认值。这个方法对于避免检查键是否存在并处理默认值很有用。
2.示例代码
import java.util.HashMap;
import java.util.Map;public class GetOrDefaultExample {public static void main(String[] args) {MapString, Integer map new HashMap();map.put(key1, 10);map.put(key2, 20);int value1 map.getOrDefault(key1, 0); // 存在的键返回对应的值int value3 map.getOrDefault(key3, 0); // 不存在的键返回默认值 0System.out.println(value1); // 输出: 10System.out.println(value3); // 输出: 0}
}3.使用场景
getOrDefault 方法在 Java 中的 Map 接口中定义它用于获取指定键对应的值如果键不存在则返回一个默认值。这个方法在许多场景下都非常有用特别是在处理默认值或避免空指针异常的情况下。以下是一些常用的地方 避免空指针异常 当你使用传统的 get 方法获取值时如果键不存在返回的是 null。使用 getOrDefault 可以避免因为空值而引发空指针异常。 MapString, Integer map new HashMap();
Integer value map.getOrDefault(key, 0); // 如果键不存在返回默认值 0处理默认值 当你需要获取一个值如果键不存在则使用一个默认值而不是 null。 MapString, String config getConfig(); // 从某处获取配置信息的映射
String username config.getOrDefault(username, guest); // 如果键不存在返回默认用户名 guest统计元素出现的次数 在统计元素出现次数时可以使用 getOrDefault 来为不存在的元素提供一个默认的计数值。 MapString, Integer wordCount new HashMap();
String word apple;// 统计单词出现次数
wordCount.put(word, wordCount.getOrDefault(word, 0) 1);初始化映射 在初始化映射时可以使用 getOrDefault 设置默认值。 MapString, ListString userRoles new HashMap();// 初始化用户角色列表
userRoles.put(admin, userRoles.getOrDefault(admin, new ArrayList()));getOrDefault 是一个很方便的方法可以简化代码提高可读性并且在处理映射中的键值对时提供了灵活性。 觉得有用的话点个赞 呗。 ❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正 如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧