2011-09-26 38 views
1

兩路,我很好奇這是更快:編程性能

第一種方式:

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

第一種方式似乎涉及不得不更頻繁地散列密鑰,但需要比第二種方式更少的對象創建。在我看來,第二種方式可能比第一種方式更快但資源更密集。

的思考?

回答

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()沒有找到密鑰時完成的。

+3

'Map.put'也執行查找。所以,這確保了查詢只執行一次,**當鑰匙存在時**。 –

+0

@Martijn Courteaux - 感謝您指出,回答編輯。 –

+0

太棒了。感謝您的迴應! – user965697