两种做事方式,我很好奇哪一种更快:
第一个方法:
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()
会进行第二次查找。