HashMap的putIfAbsent 、compute、computerIfAbsent、computerIfPresent

本文详细介绍了HashMap的四个关键方法:putIfAbsent用于插入判断,compute处理已存在和不存在key的不同行为,computeIfAbsent插入并处理null值,computeIfPresent针对存在key操作。了解它们在开发中的应用场景和特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值