例如,我需要检查 中是否有任何数据map,如果存在,则返回,否则从数据库加载。
Map<String, Data> map = Maps.newHashMap();
//Вариант 1
map.containsKey(key) ? map.get(key) : map.put(key, loadFromDatabase(key));
//Вариант 2
Data data = map.get(key);
if (data == null) {
data = map.put(key, loadFormDatabase(key));
}
return data;
那些。问题是什么会更快:在map执行之前初步检查是否存在密钥get,或者立即get检查!= null
更快、更短、更清晰
map.computeIfAbsent(key, SomeClass::loadFromDatabase)显然,第二个更快,因为它包含
containsKey更少的动作(调用)。另一方面,您应该注意字典是否可以包含 valuesnull。如果是,那么第二个代码将不断地跟随它们进入数据库,而第一个代码将正常工作。