|||查看原文|||
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));