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 이 발생합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.