alex safsafsd Asked:2020-11-15 14:22:47 +0000 UTC2020-11-15 14:22:47 +0000 UTC 2020-11-15 14:22:47 +0000 UTC 使用 Map 中的 computeIfAbsent 772 如何使用方法computeIfAbsent?它是如何工作的,在什么情况下执行? java 1 个回答 Voted Best Answer Regent 2020-11-15T14:39:02Z2020-11-15T14:39:02Z computeIfAbsent方法传递了两个参数:一个键key和一个从该键计算值的函数mappingFunction。 方法逻辑: 我们检查 map 中是否存在这样的键。如果键存在且键值不相等null,那么我们什么也不做 否则(没有键或键值等于null)我们通过应用mappingFunction来计算值key 如果最终值不等于null,则将键值对写入映射 以代码的形式,这个逻辑在文档中描述如下: if (map.get(key) == null) { V newValue = mappingFunction.apply(key); if (newValue != null) map.put(key, newValue); } 在某些情况下,putIfAbsent方法就足够了,尤其是在计算值根本不依赖于键的情况下。 例如,如果Map<Integer, List<Integer>> map您只需要按键放置一个新列表: map.putIfAbsent(key, new ArrayList<>()); 现在,如果您想立即将值放入此列表中,那么这里会更方便computeIfAbsent: map.computeIfAbsent(key, k -> new ArrayList<>()).add(100); 代替 map.putIfAbsent(key, new ArrayList<>()); map.get(key).add(100); computeIfAbsent使用具有结果记忆的方法的一个很好的例子是计算斐波那契数: private static Map<Integer, Long> map = new HashMap<>(); static { map.put(0, 0L); map.put(1, 1L); } public static long fibonacci(int x) { return map.computeIfAbsent(x, n -> fibonacci(n - 2) + fibonacci(n - 1)); } 和电话: System.out.println(fibonacci(10)); 55
computeIfAbsent方法传递了两个参数:一个键
key和一个从该键计算值的函数mappingFunction。方法逻辑:
null,那么我们什么也不做null)我们通过应用mappingFunction来计算值keynull,则将键值对写入映射以代码的形式,这个逻辑在文档中描述如下:
在某些情况下,putIfAbsent方法就足够了,尤其是在计算值根本不依赖于键的情况下。
例如,如果
Map<Integer, List<Integer>> map您只需要按键放置一个新列表:现在,如果您想立即将值放入此列表中,那么这里会更方便
computeIfAbsent:代替
computeIfAbsent使用具有结果记忆的方法的一个很好的例子是计算斐波那契数:和电话: