Java方法的编程性能



两种做事方式,我很好奇哪一种更快:

第一个方法:

if (!map.containsKey(key)) {
    map.put(key, new ArrayList<String>());
}
map.get(key).addAll(someList);

第二种方式:

List<String> existingList = map.get(key);
if (existingList == null){
    existingList = new ArrayList<String>();
}
existingList.addAll(someList);
map.put(key, existingList);

第一种方法似乎需要更频繁地散列键,但比第二种方法需要更少的对象创建。在我看来,第二种方法可能比第一种方法更快,但更耗费资源。

想法吗?

第二种方法的修改版本将是最佳的:

List<String> existingList = map.get(key);
if (existingList == null){
   existingList = new ArrayList<String>();
   map.put(key, existingList);
}
existingList.addAll(someList);

这确保了查找只执行一次,并且List只在必要时实例化并放入Map

EDIT:正如@Martijn Courteaux所指出的,当键没有找到时,put()会进行第二次查找。

最新更新