<aside> 🥲 해석이 이상한점 양해부탁드립니다 :)
</aside>
- 공용 클래스 ArrayList<E>
- implements List<E> 랜덤 액세스, 복제 가능, 일련화 가능 구현
- 목록 인터페이스의 크기 조정 가능한 array 구현
- 모든 선택적 목록 작업을 구현하고 null을 포함한 모든 요소를 허용
각 ArrayList 인스턴스에는 용량이 있음
- 용량은 목록의 요소를 저장하는 데 사용되는 어레이의 크기
- 항상 적어도 목록 크기만큼 큼
- 요소가 어레이 목록에 추가되면 용량이 자동으로 증가
- 성장 정책의 세부 사항은 요소를 추가하는 데 상각된 시간 비용이 일정하다는
사실 이외에는 명시 X
애플리케이션은 용량 보장 작업을 사용하여 많은 수의 요소를 추가하기 전에 어레이 목록 인스턴스의 용량을 늘릴 수 있음
→ 이렇게 하면 증분 재할당의 양을 줄일 수 있음
이 구현은 동기화되지 않음
→ 여러 스레드가 ArrayList 인스턴스에 동시에 액세스하고 스레드 중 하나 이상이 목록을 구조적으로 수정하는 경우 목록을 외부에서 동기화해야 함 (구조 수정은 하나 이상의 요소를 추가하거나 삭제하거나 명시적으로 백업 어레이의 크기를 조정하는 작업이며, 요소의 값만 설정하는 것은 구조가 아님)
이 작업은 일반적으로 목록을 자연스럽게 캡슐화하는 일부 개체에서 동기화하여 수행 이러한 개체가 없으면 컬렉션을 사용하여 목록을 "포장” 되어야 함
Collections . synchronizedList
-> 이 방법은 실수로 목록에 동기화되지 않은 액세스를 방지하기 위해
생성 시 수행하는 것이 가장 좋음
List list = Collections . synchronizedList(new ArrayList( . . . ) );
이 클래스의 반복기 및 listIterator 메서드에 의해 반환되는 반복기는 fail-fast임
반복기 생성 후 언제든지 목록이 구조적으로 수정되는 경우, 반복기 자체의 제거 또는 추가 방법을 통하지 않는 한 반복기가 Concurrent ModificationException을 생성
→ 따라서, 동시 수정에 직면하여, 반복자는 미래의 결정되지 않은 시간에 자의적이고 비결정적인 행동을 감수하기 보다는 빠르고 깨끗하게 실패