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