HashMap中的computeifAbsent()方法

computeIfAbsent()方法用于检查HashMap中是否存在指定key,如果不存在,则计算该key的值(使用提供的函数)并添加到HashMap中。如果key已存在,方法将返回原有值,不会重新计算。示例代码展示了在key存在和不存在时的不同行为,以及当value为集合时如何处理。
摘要由CSDN通过智能技术生成

computeifAbsent()方法是对hashMap中指定的key的值进行重新计算,如果不存在这个key,则添加到hashMap中。

代码示例:

当hashMap中不存在对应的key时

public static void main(String[] args) {
		HashMap<String, Integer> hashMap=new HashMap<>();
		hashMap.put("a", 10);
		hashMap.put("b", 20);
		System.out.println("computeIfAbsent 方法之前"+hashMap);
		Integer computeIfAbsent = hashMap.computeIfAbsent("c", key->30);
		System.out.println("computeIfAbsent:"+computeIfAbsent);
		System.out.println("computeIfAbsent 方法之后"+hashMap);
		
	}

结果:

computeIfAbsent 方法之前{a=10, b=20}
computeIfAbsent:30
computeIfAbsent 方法之后{a=10, b=20, c=30}

 结果可以看出,当HashMap中不存在对应的key时,在使用computeIfAbsent()方法是,会根据key后的表达式对key对应的value进行计算,并把key-value这个键值对,保存到map中。

代码示例:

当hashMap中存在对应的key时

 

public static void main(String[] args) {
		HashMap<String, Integer> hashMap=new HashMap<>();
		hashMap.put("a", 10);
		hashMap.put("b", 20);
		System.out.println("computeIfAbsent 方法之前"+hashMap);
		Integer computeIfAbsent = hashMap.computeIfAbsent("a", key->30);
		System.out.println("computeIfAbsent:"+computeIfAbsent);
		System.out.println("computeIfAbsent 方法之后"+hashMap);
		
	}

结果:

computeIfAbsent 方法之前{a=10, b=20}
computeIfAbsent:10
computeIfAbsent 方法之后{a=10, b=20}
 

 结果可以看出,map中存在key是,是不会对value进行重新计算的,方法返回的是key原来对应的值。

代码示例:

当hashMap中的value是集合时,有对应的key

public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		list.add("a");									
		HashMap<String, List<String>> hashMap=new HashMap<>();
		hashMap.put("a", list);
		System.out.println("computeIfAbsent 方法之前"+hashMap);	
		List<String> computeIfAbsent = hashMap.computeIfAbsent("a", key->new ArrayList<>());
		System.out.println("computeIfAbsent:"+computeIfAbsent);
		hashMap.computeIfAbsent("a", key->new ArrayList<>()).add("lili");
		System.out.println("computeIfAbsent 方法之后"+hashMap);
		
	}

结果:

computeIfAbsent 方法之前{a=[a]}
computeIfAbsent:[a]
computeIfAbsent 方法之后{a=[a, lili]}

结果可以看到,hashMap.computeIfAbsent("a", key->new ArrayList<>());的意思是存在key为a的键值,返回value值,

 hashMap.computeIfAbsent("a", key->new ArrayList<>()).add("lili");存在key为a的键值,并向对应的value,list集合中添加“lili”

代码示例:

当hashMap中的value是集合时,没对应的key

	public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		list.add("a");									
		HashMap<String, List<String>> hashMap=new HashMap<>();
		hashMap.put("a", list);
		System.out.println("computeIfAbsent 方法之前"+hashMap);	
		List<String> computeIfAbsent = hashMap.computeIfAbsent("b", key->new ArrayList<>());
		System.out.println("computeIfAbsent:"+computeIfAbsent);
		hashMap.computeIfAbsent("b", key->new ArrayList<>()).add("bibi");
		System.out.println("computeIfAbsent 方法之后"+hashMap);
		
	}

computeIfAbsent 方法之前{a=[a]}
computeIfAbsent:[]
computeIfAbsent 方法之后{a=[a], b=[bibi]}

 不存在时,会创建一list集合,把“bibi”放入list集合,然后以键值对的形式存入到map中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值