Java方法的编程性能

时间:2011-09-26 19:10:07

标签: java performance

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

第一种方式:

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);

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

思想?

1 个答案:

答案 0 :(得分:3)

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

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

这可以确保只进行一次查找,List仅在必要时实例化并放入Map

编辑:注意到@Martijn Courteaux,当找不到密钥时,put()会进行第二次查找。