PHpullh
학습 라이브러리/Java/ArrayList 내부 구조

JAVA · 컬렉션

ArrayList 내부 구조

ArrayList의 동적 배열 구현, 용량 관리, 성능 특성을 알아봅니다.

컬렉션중급ArrayList동적배열용량성능

핵심 설명

ArrayList의 동적 배열 구현, 용량 관리, 성능 특성을 알아봅니다.

Java code

import java.util.*;

public class ArrayListInternal {
    public static void main(String[] args) {
        // 기본 용량: 10
        ArrayList<String> list = new ArrayList<>();

        // 초기 용량 지정 (재할당 방지)
        ArrayList<String> sized = new ArrayList<>(100);

        // 추가: O(1) 평균, O(n) 최악 (배열 확장 시)
        for (int i = 0; i < 15; i++) {
            list.add("item-" + i);
        }
        // 내부 배열 크기: 10 -> 15 (1.5배 증가)

        // 인덱스 접근: O(1)
        String item = list.get(5);

        // 중간 삽입/삭제: O(n) (요소 이동)
        list.add(0, "first"); // 모든 요소 오른쪽으로 이동
        list.remove(0);       // 모든 요소 왼쪽으로 이동

        // 메모리 최적화
        list.trimToSize(); // 배열 크기를 size에 맞춤

        // subList — 원본의 뷰 (복사 아님)
        List<String> sub = list.subList(0, 3);
        // sub 변경 시 원본도 변경됨!

        // 불변 리스트
        List<String> immutable = List.of("a", "b", "c");
        List<String> copy = List.copyOf(list);
    }
}

학습 팁

대량 데이터를 담을 것을 알면 초기 용량을 지정하세요. new ArrayList(expectedSize)로 불필요한 배열 재할당을 피할 수 있습니다.

주의할 점

subList()는 뷰입니다. 원본 리스트를 구조적으로 변경하면 ConcurrentModificationException이 발생합니다.

자주 묻는 질문

ArrayList 내부 구조란 무엇인가요?

ArrayList 의 동적 배열 구현, 용량 관리, 성능 특성을 알아봅니다.

ArrayList 내부 구조 학습 시 주의할 점은 무엇인가요?

subList() 는 뷰입니다. 원본 리스트를 구조적으로 변경하면 ConcurrentModificationException 이 발생합니다.