Java的Map中put,compute,putIfAbsent,computeIfAbsent与的区别
1.put
如果key存在,则用新的值替换,返回旧值
如果key不存在,则添加,返回null
@Test
public void testMap() {
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
String v = map.put("b","v"); // 输出 B
System.out.println(v);
String v1 = map.put("c","v");
System.out.println(v1); // 输出:NULL
}
2.compute(与put不同的是返回新值)
如果key存在,则用新的值替换,返回新的值
如果key不存在,则添加,返回新的值
@Test
public void testMap() {
Map<String, String> map = new HashMap<>();
map.put("a", "A");
map.put("b", "B");
String val = map.compute("b", (k, v) -> "v"); // 输出 v
System.out.println(val);
String v1 = map.compute("c", (k, v) -> "v"); // 输出 v
System.out.println(v1);
}
3.putIfAbsent
如果key存在,则不会替换,返回旧值
如果key不存在,则添加,返回null
@Test
public void testMap() {
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
String v = map.putIfAbsent("b","v"); // 输出 B
System.out.println(v);
String v1 = map.putIfAbsent("c","v"); // 输出 null
System.out.println(v1);
}
4.computeIfAbsent
如果key存在,不会替换,返回旧值
如果key不存在,则添加,返回新的值
@Test
public void testMap() {
Map<String, String> map = new HashMap<>();
map.put("a","A");
map.put("b","B");
String v = map.computeIfAbsent("b",k->"v"); // 输出 B
System.out.println(v);
String v1 = map.computeIfAbsent("c",k->"v"); // 输出 v
System.out.println(v1);
}