java.util.컬렉션의 가장 낮은 오버헤드?
-
14-11-2019 - |
문제
나는 메소드를 호출하는 또 다른 API 를 사용하는 java.util.Collection
의 개체입니다.나는 보았 방법 즉시 복사본에 모든 것을 새로운 컬렉션 ArrayList
를 수행하기 전에 그 작업입니다.
이 나 궁금:무엇이 절대적으로 낮은 오버헤드 Java 컬렉션을 사용할 수 있는 신속하게 조립한 매개변수에 대한 이 방법은?
해결책
요소를 복사하는 방법에 따라 다르지만 다음과 같은 ArrayList
-copy를 만드는 경우
new ArrayList<Something>(inputCollection);
.
또는
someCopy.addAll(inputCollection);
.
그런 다음 inputCollection.toArray()
가 가장 잘 구현하는 ArrayList
를 통과합니다.
다른 팁
소스 데이터에 따라 다릅니다.
소스 데이터가 이미 배열이고 배열이 다른 것들에 의해 사용되지 않으면 가장 빠른 방법은 얇은 래퍼를 갖는 것입니다.
final Object[] source = ...
Collection colllection = new AbstractCollection(){
public Object[] toArray(){ return source; }
// other methods don't matter
}
. 메모리 발자국에 대해 이야기하는 경우 "NoFollow noreferrer"> 이것을 봅니다. 메모리 측정기 에서 Arrays$ArrayList
가 누락되었지만 ArrayList
(Arrays.asList(...)
)의 좋은 대안이 될 수 있습니다.
업데이트 : 나는 GitHub의 프로젝트의 새로운 위치에 원래 링크를 업데이트했습니다.이러한 메트릭스가 수년 중 몇 년이 걸립니다.
제휴하지 않습니다 StackOverflow