put:翻译为【添加】,如果map中没有该key,则直接添加;如果map中已经存在该key,则value会覆盖原来的值。
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
System.out.println(map);
复制代码
输出:{1=a, 2=b}
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.put(2, "bb");
System.out.println(map);
复制代码
输出:{1=a, 2=bb}
putIfAbsent:翻译为【不存在则添加】,如果map中没有该key,则直接添加;如果map中已经存在该key,则value保持不变。
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.putIfAbsent(2, "b");
System.out.println(map);
复制代码
输出:{1=a, 2=b}
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.putIfAbsent(2, "bb");
System.out.println(map);
复制代码
输出:{1=a, 2=b}
compute:翻译为【计算】,如果map中没有该key,则会计算出一个符合value类型的值赋给value;如果map中已经存在该key,则会把计算出的值覆盖原来的value。
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.compute(2, (k, v) -> "compute");
System.out.println(map);
复制代码
输出:{1=a, 2=compute}
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.compute(2, (k, v) -> "compute");
System.out.println(map);
复制代码
输出:{1=a, 2=compute}
computeIfAbsent:翻译为【不存在则计算】,如果map中没有该key,则会计算出一个符合value类型的值赋给value;如果map中已经存在该key,则value保持不变。
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.computeIfAbsent(2, k -> "computeIfAbsent");
System.out.println(map);
复制代码
输出:{1=a, 2=computeIfAbsent}
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.computeIfAbsent(2, k -> "computeIfAbsent");
System.out.println(map);
复制代码
输出:{1=a, 2=b}
computeIfPresent:翻译为【存在则计算】,如果map中没有该key,则该键值对不会添加到map中;如果map中已经存在该key,则会把计算出的值覆盖原来的value。
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.computeIfPresent(2, (k, v) -> "computeIfPresent");
System.out.println(map);
复制代码
输出:{1=a}
Map<Integer, String> map = new HashMap<>();
map.put(1, "a");
map.put(2, "b");
map.computeIfPresent(2, (k, v) -> v + "-" + "computeIfPresent");
System.out.println(map);
复制代码
输出:{1=a, 2=b-computeIfPresent}