如果不包含则放入经典动态编程,哪种风格更好?

时间:2018-08-06 10:21:10

标签: java performance dynamic-programming

在动态编程问题中,拥有包含先前案例的映射是很正常的,每次到达新状态时,都必须检查它是否已经存在于映射中,如果使用,则使用它,如果不添加它。我想知道这两种方式之间在性能和样式上哪个更好:

Value value;
if(!map.contains(key)){
    value = calculateValue();
    map.put(key, value);
} else {
    value = map.get(key);
}

和这个:

if(!map.contains(key)){
    map.put(key, calculateValue());
}
Value value = map.get(key);

第二个似乎效率不高,但是我可以避免使用未初始化的变量,该变量有一天可能导致错误。

1 个答案:

答案 0 :(得分:5)

最易读的方式是Map.computeIfAbsent。当值不存在时,它将添加仅 的函数调用,该函数调用可以忽略不计。

代码如下:

final Value value = map.computeIfAbsent(key, k -> calculateValue());