HashMap的四个常用方法
Map接口的实现类,特点是利用key 和 value 来存储数据,在日常的开发过程中有着特别多的好处。今天来盘点可以提高工作效率的hashMap常用的四个方法。
putIfAbsent
当key存在时,返回旧的值。
当key不存在时,则进行将映射加入到map。值得注意的是当插入的value为null也会进行插入。
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object a = map.putIfAbsent("a",5);
System.out.println(a.toString());
System.out.println(map);
而且当key不存在的时候,插入返回的Object是 null值。
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object b = map.putIfAbsent("e",5);
System.out.println(b);
System.out.println(map);
当插入不存在的key时,value为null时,也会插入
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.putIfAbsent("e",null);
System.out.println(c);
System.out.println(map);
compute
computer本身就是计算一词。
我们分别探讨当插入的key存在和不存在的情况
不存在
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.compute("e",(key,value)->5);
System.out.println(c);
System.out.println(map);
存在
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.compute("d",(key,value)->5);
System.out.println(c);
System.out.println(map);
特别注意的是,当存在的key将value计算为null时,会删除整个key值,map的大小也随之改变。
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.compute("d",(key,value)->null);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
computerIfAbsent
absent为key不存在的时候,会进行插入的情况
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.computeIfAbsent("e",(value)-> 4);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
当存在的key对应value为null的时候
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.computeIfAbsent("d",(value)->null);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
将已存在的key对应null值修改为有值的情况
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",null);
Object c = map.computeIfAbsent("d",(value)-> 4);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
插入不存在的key对应null的value,也不会插入key
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.computeIfAbsent("e",(value)-> null);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
computerIfPresent
当key存在的时候进行操作
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.computeIfPresent("d",(key,value)-> 5);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
当存在的key将value设为null的时候,会删除key
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.computeIfPresent("d",(key,value)-> null);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
当key不存在的时候,不进行操作
Map map = new HashMap(16);
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
Object c = map.computeIfPresent("e",(key,value)-> 5);
System.out.println(c);
System.out.println(map);
System.out.println(map.size());
总结
最简单的是computerIfPresent,只针对存在的key进行操作。
其次是computerIfAbsent,对已有key也进行了判断,当原有的key对应的value为null的时候会进行插入,以及对未存在的key也会插入。
再者就是computer,对两种可能出现的结果做了一次整合。
最后putIfAbsent针对返回值做了判断,对插入做了很好的检验。当存在会返回旧值,不存在则进行插入。
注意:除了putIfAbsent当新插入的key和value为null ,或者将已存在的key的value修改为null,原先的key value都会删除。
ps:如有错误请提及。