ArrayList는 자바에서 제공하는 동적 배열(Dynamic Array).
기존 배열(Array)과 다르게 크기를 정하지 않아도 되고, 요소를 자유롭게 추가하거나 제거할 수 있다.
java.util 패키지에 포함
내부적으로 배열을 사용하지만, 자동으로 크기를 조절함
순차적 데이터 저장에 적합
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
// 기본 선언
ArrayList<String> list = new ArrayList<>();
// 초기값 추가
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println(list); // [Apple, Banana, Cherry]
}
}
| 메서드 | 설명 |
|---|---|
add(E e) | 요소 추가 |
add(int index, E e) | 특정 위치에 요소 추가 |
get(int index) | 특정 위치의 요소 반환 |
set(int index, E e) | 특정 위치의 요소 변경 |
remove(int index) | 특정 위치의 요소 제거 |
remove(Object o) | 특정 객체 제거 |
size() | 요소 개수 반환 |
isEmpty() | 리스트가 비어있는지 확인 |
contains(Object o) | 특정 요소가 있는지 확인 |
clear() | 모든 요소 제거 |
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cherry");
// 일반 for문
for (int i = 0; i < fruits.size(); i++) {
System.out.println(fruits.get(i));
}
// 향상된 for문 (for-each)
for (String fruit : fruits) {
System.out.println(fruit);
}
import java.util.Collections;
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(1);
numbers.add(3);
Collections.sort(numbers); // 오름차순 정렬
System.out.println(numbers); // [1, 3, 5]
ArrayList는 스레드에 안전하지 않음
→ 멀티스레드 환경에서는 Vector 또는 Collections.synchronizedList() 사용 고려
중간에 요소를 삽입/삭제하면 성능이 떨어질 수 있음 (뒤 요소들을 전부 이동시켜야 하므로)
기본 타입(int, double 등)은 사용할 수 없음 → Integer, Double과 같은 래퍼 클래스를 사용해야 함
| 구분 | 배열(Array) | ArrayList |
|---|---|---|
| 크기 | 고정 | 동적 |
| 타입 | 기본타입 가능 | 객체만 가능 |
| 메서드 | 거의 없음 | 다양한 메서드 제공 |
| 성능 | 빠름 | 상대적으로 느림 |
ArrayList는 리스트 형태의 데이터를 다룰 때 거의 필수적으로 사용하는 자료구조이다.
특히, 요소의 개수가 유동적일 때 매우 유용하며, 다양한 메서드를 통해 쉽게 데이터를 조작할 수 있다.