2011-02-15 6 views
8

개체의 java.util.Collection을 허용하는 다른 API에서 메서드를 호출하고 있습니다. 메서드를 살펴본 결과 컬렉션의 모든 내용을 즉시 ArrayList으로 복사 한 다음 작업을 수행합니다.가장 낮은 오버 헤드를 가진 java.util.Collection?

궁금한 점이 있습니다 :이 메서드에 대한 매개 변수를 빠르게 어셈블하는 데 사용할 수있는 가장 낮은 오버 헤드 Java Collection은 무엇입니까? 복사하기 요소가 있지만,이

new ArrayList<Something>(inputCollection); 

같은 ArrayList -copy을 만드는 경우 방법에 따라 달라거나

someCopy.addAll(inputCollection); 

않는 경우 다음 그것은 inputCollection.toArray() 거치게됩니다

답변

6

하는 아마도 ArrayList으로 구현하는 것이 가장 좋습니다.

+2

+1 좋은 답변입니다. .toArray()가 사용되지 않더라도, 다른 옵션은 정렬의 반복자이며 배열을 반복합니다 (ArrayList의 기본 저장소)는 다른 것보다 빠릅니다. 그래서 ArrayList는 어느 경우 에나 승자입니다. ArrayList를 더 잘 사용하기 위해 – rfeak

+0

을 생성합니다. '새로운 ArrayList (numItems)'. – jtahlborn

+0

@jtahlborn : 어떻게 도움이되는지 알 수 없습니다. 생성자 접근법을 사용하는 경우 이미 처리되었으므로'addAll' 메소드를 사용하는 경우에는 요소를 추가하기 전에 내부적으로 용량을 호출해야합니다. – aioobe

0

소스 데이터에 따라 다릅니다.

소스 데이터가 이미 배열이며, 배열이 다른 사람에 의해 사용하지 않을 경우

이 가장 빠른 방법은 얇은 래퍼 것입니다 :

final Object[] source = ... 

Collection colllection = new AbstractCollection(){ 
    public Object[] toArray(){ return source; } 
    // other methods don't matter 
} 
0

당신은 메모리 사용량에 대해 이야기하는 경우를하는을 this tablememory-measurer에서 확인하십시오. Arrays$ArrayList이 누락되었지만 ArrayList (Arrays.asList(...)) 대신 좋은 대안이 될 수 있습니다.

관련 문제