wordpress 多站点迁移,wordpress 显示指定文章,徐州润金城开发公司,宁波建网站一站式服务map.computeIfAbsent() 和 map.putIfAbsent() 都是 java.util.Map 接口提供的方法#xff0c;用于处理键值对的插入操作。它们在功能上有相似之处#xff0c;但也有一些重要的区别。下面详细解释这两个方法的异同#xff1a;
map.putIfAbsent(K key, V value) 功能#xf…map.computeIfAbsent() 和 map.putIfAbsent() 都是 java.util.Map 接口提供的方法用于处理键值对的插入操作。它们在功能上有相似之处但也有一些重要的区别。下面详细解释这两个方法的异同
map.putIfAbsent(K key, V value) 功能如果指定的键尚未关联到任何值或者映射到 null则尝试将指定的值与此键关联。返回值返回与指定键关联的前一个值如果没有前一个值则返回 null。线程安全在多线程环境中需要外部同步来保证线程安全。示例
MapString, Integer map new HashMap();
map.put(apple, 1);
Integer oldValue map.putIfAbsent(apple, 2); // 返回 1
Integer newValue map.putIfAbsent(banana, 3); // 返回 null
map.computeIfAbsent(K key, Function? super K, ? extends V mappingFunction) 不同点 功能如果指定的键尚未关联到任何值或者映射到 null则尝试使用给定的函数计算一个值并将该值与此键关联。返回值返回与指定键关联的当前值可能是新计算的值。线程安全在多线程环境中需要外部同步来保证线程安全。示例 MapString, ListString map new HashMap();
ListString list map.computeIfAbsent(apple, k - new ArrayList());
list.add(red);
ListString list2 map.computeIfAbsent(banana, k - new ArrayList());
list2.add(yellow); 异同点 相同点 目的两者都用于在键不存在时插入值。线程安全两者都需要外部同步来保证多线程环境下的线程安全。 值的提供方式 putIfAbsent 直接提供一个具体的值。computeIfAbsent 提供一个函数该函数在键不存在时被调用以计算值。 返回值 putIfAbsent 返回与指定键关联的前一个值如果没有前一个值则返回 null。computeIfAbsent 返回与指定键关联的当前值可能是新计算的值。 延迟计算 putIfAbsent 在调用时立即确定值。computeIfAbsent 在调用时只传递函数只有在键不存在时才会调用该函数来计算值这可以避免不必要的计算。 示例对比
putIfAbsent 示例
MapString, Integer map new HashMap();
map.put(apple, 1);// 尝试插入 apple 的值 2但由于 apple 已经存在不会插入
Integer oldValue map.putIfAbsent(apple, 2); // 返回 1
System.out.println(oldValue); // 输出 1// 尝试插入 banana 的值 3由于 banana 不存在会插入
Integer newValue map.putIfAbsent(banana, 3); // 返回 null
System.out.println(newValue); // 输出 null
computeIfAbsent 示例 MapString, ListString map new HashMap();// 尝试插入 apple 的值由于 apple 不存在会调用函数创建一个新的列表
ListString list map.computeIfAbsent(apple, k - new ArrayList());
list.add(red);// 尝试插入 banana 的值由于 banana 不存在会调用函数创建一个新的列表
ListString list2 map.computeIfAbsent(banana, k - new ArrayList());
list2.add(yellow);System.out.println(map); // 输出 {apple[red], banana[yellow]}
总结
putIfAbsent适用于已知要插入的具体值的情况。computeIfAbsent适用于需要在键不存在时动态计算值的情况可以避免不必要的计算。