gpt4 book ai didi

java - java.util.Map 的 getOrDefault() 是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:55 25 4
gpt4 key购买 nike

我注意到,如果我执行 map.getOrDefault("key1", new Object()),即使 map 中的 key1 存在对象,new Object() 已创建。虽然它不是由该方法返回的,但它仍然会创建它。例如,

public class Empl {
private int id;
private String name;

public Empl(String name) {
// TODO Auto-generated constructor stub
System.out.println(name);
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name+id;
}
}

运行跟随,

Map<String, Empl> map = new HashMap<String, Empl>();
Empl imp = new Empl("timon");
map.put("1", imp);
System.out.println(map.getOrDefault("1", new Empl("dumnba")));

给出这个输出:

timon
dumnba
timon0

是否应该仅在 map 中不存在默认对象时才创建默认对象?如果不是,是什么原因?

最佳答案

Shouldn't the default object be created only if it is not there in the map ?

怎么会这样呢?这个电话:

map.getOrDefault("1", new Empl("dumnba"))

相当于:

String arg0 = "1";
Empl arg1 = new Empl("dumnba");
map.getOrDefault(arg0, arg1);

换句话说,所有参数都在传递给方法之前进行评估。

您可能会改用 computeIfAbsent,但如果 key 不存在,这将修改 map ,您可能不希望这样:

System.out.println(map.computeIfAbsent("1", k -> new Empl("dumnba")));

关于java - java.util.Map 的 getOrDefault() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43737014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com