0 java performance dynamic-programming
在动态编程问题中,有一个包含先前案例的地图是很正常的,每次到达新状态时,都必须检查它是否已经在地图中,如果是,则使用它,如果不是,则添加它.我想知道这两种方式之间在性能和风格方面有什么好处:
Value value;
if(!map.contains(key)){
value = calculateValue();
map.put(key, value);
} else {
value = map.get(key);
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
if(!map.contains(key)){
map.put(key, calculateValue());
}
Value value = map.get(key);
Run Code Online (Sandbox Code Playgroud)
第二个似乎效率较低,但允许我避免使用可能导致错误的未初始化变量.
最可读的方式是Map.computeIfAbsent.它仅在缺少值时才添加函数调用,这应该可以忽略不计.
代码看起来像:
final Value value = map.computeIfAbsent(key, k -> calculateValue());
Run Code Online (Sandbox Code Playgroud)