栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

HashMap的putIfAbsent 、compute、computerIfAbsent、computerIfPresent

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HashMap的putIfAbsent 、compute、computerIfAbsent、computerIfPresent

HashMap的四个常用方法
  • HashMap的四个常用方法
    • putIfAbsent
    • compute
    • computerIfAbsent
    • computerIfPresent
  • 总结

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:如有错误请提及。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号