ArrayList — 확장 가능한 배열 기반 리스트
ArrayList — 확장 가능한 배열 기반 리스트
List 인터페이스의 확장 가능한 배열(resizable-array) 구현 클래스예요.
본문
시그니처
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
타입 매개변수: E — 이 리스트의 요소 타입.
설명
List 인터페이스의 확장 가능한 배열 구현이에요. 모든 선택적 리스트 연산을 구현하고 null을 포함한 모든 요소를 허용해요. List 인터페이스 구현 외에도 이 클래스는 리스트를 저장하는 데 내부적으로 사용되는 배열의 크기를 조작하는 메서드를 제공해요. (이 클래스는 동기화되지 않는다는 점을 제외하면 Vector와 거의 동등해요.)
size, isEmpty, get, set, iterator, listIterator 연산은 상수 시간으로 실행돼요. add 연산은 분할 상환 상수 시간으로 실행되며, 즉 n개의 요소를 추가하는 데 O(n) 시간이 걸려요. 다른 모든 연산은 (대략) 선형 시간으로 실행돼요. LinkedList 구현에 비해 상수 계수는 낮아요.
각 ArrayList 인스턴스는 용량(capacity)을 가져요. 용량은 리스트의 요소를 저장하는 데 사용되는 배열의 크기예요. 항상 리스트 크기 이상이에요. 요소가 추가되면 용량이 자동으로 커져요. 기본적으로 모든 비트는 false 값으로 시작해요.
애플리케이션은 많은 요소를 추가하기 전에 ensureCapacity 연산으로 ArrayList 인스턴스의 용량을 늘릴 수 있어요. 이는 증분 재할당의 양을 줄일 수 있어요.
참고로 이 구현은 동기화되지 않아요. 여러 스레드가 ArrayList 인스턴스에 동시에 접근하고 그중 하나 이상이 구조적으로 수정하면 외부 동기화가 필요해요. 보통 자연스럽게 객체를 캡슐화하는 어떤 객체에 동기화하는 방식으로 해결돼요.
주요 메서드
add(E e)— 지정한 요소를 이 리스트의 끝에 추가해요.add(int index, E element)— 지정한 요소를 이 리스트의 지정한 위치에 삽입해요.get(int index)— 이 리스트에서 지정한 위치의 요소를 반환해요.set(int index, E element)— 이 리스트의 지정한 위치의 요소를 지정한 요소로 교체해요.remove(int index)— 이 리스트에서 지정한 위치의 요소를 제거해요.size()— 이 리스트의 요소 수를 반환해요.clear()— 이 리스트에서 모든 요소를 제거해요.indexOf(Object o)— 지정한 요소가 처음 나타나는 인덱스를 반환해요.toArray()— 이 리스트의 모든 요소를 올바른 순서로 포함한 배열을 반환해요.ensureCapacity(int minCapacity)— 필요하다면 이ArrayList인스턴스가 최소한 지정한 요소 수를 담을 수 있도록 보장해요.