콘텐츠로 이동

ArrayList

배열 리스트 (ArrayList)

ArrayList: 동적 배열 기반의 List 구현체. 내부 배열을 자동으로 확장/축소한다.


왜 사용하는가?

기본 배열(int[])은 크기가 고정되어 동적으로 요소를 추가·삭제하기 어렵다. ArrayList는 크기를 자동으로 조절하며, 인덱스 기반 빠른 조회가 필요할 때 최적이다.

어떻게 쓰는가?

List<String> list = new ArrayList<>();

// 추가
list.add("A");        // 마지막에 추가 O(1)
list.add(0, "B");     // 특정 위치에 추가 O(n)

// 조회
String s = list.get(0);   // 인덱스 조회 O(1)

// 삭제
list.remove(0);        // 인덱스로 삭제 O(n)
list.remove("A");      // 값으로 삭제 O(n)

// 크기
int size = list.size();

어디 상황에서 자주 쓰는가?

  • 데이터 조회(get)가 잦고, 추가·삭제가 주로 끝(마지막)에 일어나는 경우
  • 데이터 순서가 중요한 경우
  • 실무에서 List가 필요한 경우의 기본값 (가장 많이 사용됨)

시간 복잡도

연산 위치 시간복잡도
추가 마지막 O(1)
추가 앞 / 중간 O(n)
삭제 마지막 O(1)
삭제 앞 / 중간 O(n)
인덱스 조회 - O(1)
값 검색 - O(n)

장점

  • 인덱스 기반 O(1) 조회 — 임의 접근이 빠름
  • 메모리가 연속 배치 → CPU 캐시 효율 우수
  • Java에서 가장 널리 쓰이는 컬렉션, 사용법이 단순

단점

  • 앞·중간 추가·삭제 시 O(n) — 요소 이동 발생
  • 내부 배열 용량 초과 시 배열 복사(resize) 발생 → 일시적 성능 저하
  • 미리 할당된 빈 공간으로 메모리 낭비 가능