如果我不得不在HashMap中为一个键(对于许多键)设置值,那么哪个键更好用. getOrDefault()或putIfAbsent() 因为如果已经设置了密钥,该方法将返回与密钥关联的值.并且两者都将键,值对作为参数.
Jea*_*ard 11
是的,如果已经设置了密钥,它们都将返回与密钥关联的值,但是一个只是一个getter,而另一个是setter.
的putIfAbsent
如果指定的键尚未与值关联(或映射为null),则将其与给定值关联并返回null,否则返回当前值.
getOrDefault
返回指定键映射到的值,如果此映射不包含键的映射,则返回defaultValue.
如果您的目标只是检索值,那么请使用getOrDefault.否则,如果要在不存在时设置值,请使用putIfAbsent.
根据你的第一句话,
如果我必须在HashMap中为一个键(对于许多键)设置值,如果不存在那么哪个更好
你应该使用putIfAbsent.
Mar*_*ark 10
在Java8中还有computeIfAbsent返回值(如果存在)或者如果它不存在则通过lambda函数创建它,将其添加到Map并返回其值.
Value v = map.computeIfAbsent(key, k -> new Value(f(k)));
Run Code Online (Sandbox Code Playgroud)
getOrDefault() 不会改变地图,因此如果您随后检查其内容,则不会在地图中找到值,例如
HashMap<String, String> map = new HashMap<>();
map.getOrDefault("something", "default"); // returns "default"
assertTrue(map.isEmpty());
Run Code Online (Sandbox Code Playgroud)
putIfAbsent() 确实改变了地图,因此如果您随后检查其内容,您将在地图中找到值,例如
HashMap<String, String> map = new HashMap<>();
map.putIfAbsent("something", "default");
assertFalse(map.isEmpty());
Run Code Online (Sandbox Code Playgroud)
您应该选择一种适合您的需求。