2011-09-26 2 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 필요 넣어되도록합니다.

EDIT :@Martijn Courteaux 바와 같이 키가 발견되지 않을 때, 제 put() 조회가 수행된다.

+3

'Map.put'도 검색을 수행합니다. 그래서, 이것은 룩업이 ** 단지 ** 키가 존재할 때 한번 수행된다는 것을 보장합니다 **. –

+0

@ Martyn Courteaux - 지적 해 주신 것에 감사드립니다. –

+0

굉장합니다. 응답 주셔서 감사합니다! – user965697