put与putIfAbsent区别

发布于:2023-01-04 ⋅ 阅读:(337) ⋅ 点赞:(0)

|||查看原文|||

put与putIfAbsent区别:

put在放入数据时,如果放入数据的key已经存在与Map中,最后放入的数据会覆盖之前存在的数据,

而putIfAbsent在放入数据时,如果存在重复的key,那么putIfAbsent不会放入值。

putIfAbsent 如果传入key对应的value已经存在,就返回存在的value,不进行替换。如果不存在,就添加key和value,返回null

getOrDefault

Map<Integer,String> map = new HashMap<>();
map.put(1,"a");
map.put(2,"b");
map.put(3,"c");

/**
 * getOrDefault 方法
 *
 * 如果指定的key存在,则返回该key对应的value,
 * 如果不存在,则返回指定的值。
 *
 * 例子:key为4不存在,输出d
 */
System.out.println(map.getOrDefault(4,"d"));

computeIfAbsent

/**
 * computeIfAbsent 方法
 * 如果指定的key不存在,则通过指定的K -> V计算出新的值设置为key的值
 */
map.computeIfAbsent(1, key -> key + " computed");
// 存在key为1,则不进行计算,输出值 a
System.out.println(map.get(1));

map.computeIfAbsent(4, key -> key + " computed");
// 不存在key为4,则进行计算,输出值 4 computed
System.out.println(map.get(4));

computeIfPresent

/**
 * computeIfPresent 方法
 * 如果指定的key存在,则根据旧的key和value计算新的值newValue,
 * 如果newValue不为null,则设置key新的值为newValue,
 * 如果newValue为null, 则删除该key的值,
 */
map.computeIfPresent(1, (key, value) -> (key + 1) + value);
// 存在key为1, 则根据旧的key和value计算新的值,输出 2a
System.out.println(map.get(1));

map.computeIfPresent(2, (key, value) -> null);
// 存在key为2, 根据旧的key和value计算得到null,删除该值,输出 null
System.out.println(map.get(2));