2016-09-13 5 views
2

많은 List 구현에는 컬렉션의 초기 용량을 지정할 수있는 옵션이 있습니다. CopyOnWriteArrayList은 왜 허용되지 않습니까?CopyOnWriteArrayList의 초기 용량

+0

왜 필요하다고 생각하십니까? –

+0

매번 새로운 복사본을 제공하기 때문에 연산이 비싸다는 것을 알지만 이전에는 생성자를 자세히 살펴 보지 않았습니다. 이 [답변] (http://stackoverflow.com/a/39453595/2063026) 나는 이것이 가능하지 않다는 생각이 들었다. 'CopyOnWriteArrayList'는 대규모 콜렉션에서 동작하는 병렬 스트림에서 사용하기에는 매우 좋지 않은 선택입니다. – vsnyc

답변

7

종래의 ArrayList에서 용량은 나중에 더 많은 요소가 목록에 추가 될 수 있도록 더 많은 공간을 보조 배열에 예약하는 힌트입니다.

CopyOnWriteArrayList에서 모든 (원자) 쓰기 작업은 새로운 백업 배열을 만듭니다. 이 공간을 사용하지 않기 때문에 현재 목록 크기보다 큰 배열을 미리 할당 할 필요가 없습니다.

+0

고마워, 일반적으로 말이 되네. 대규모 컬렉션 작업을 할 때 더 큰 용량을 할당하여 성능 향상을 기대했습니다. 분명히, 이것은 데이터 구조의 잘못된 선택 일 것입니다 (빈번한 쓰기를 위해) – vsnyc

+0

* 분명히, 이것은 (빈번한 쓰기를 위해) 사용하는 데이터 구조의 잘못된 선택 일 것입니다 * - 절대적으로 맞습니다! –