11.2 ArrayList와 LinkedList
가장 많이 쓰이는 컬렉션인 List 계열을 자세히 살펴봅니다. List는 배열처럼 데이터를 순서대로 저장하되, 크기가 동적으로 변하는 스마트 배열 이라고 생각하면 됩니다.
1. ArrayList
ArrayList는 내부적으로 배열(Array)을 기반 으로 만들어졌습니다. 요소를 추가하면 내부 배열이 꽉 찼을 때 더 큰 배열로 자동으로 확장됩니다. 순서(인덱스)로 데이터를 빠르게 조회 하는 상황에 최적화되어 있습니다.
import java.util.ArrayList;
ArrayList<String> fruits = new ArrayList<>();
// 1. add(): 요소 추가
fruits.add("사과");
fruits.add("바나나");
fruits.add("딸기");
System.out.println(fruits); // [사과, 바나나, 딸기]
// 2. get(index): 특정 위치의 요소 조회
System.out.println(fruits.get(1)); // 바나나
// 3. size(): 저장된 요소의 개수
System.out.println(fruits.size()); // 3
// 4. set(index, element): 특정 위치의 요소 수정
fruits.set(0, "망고");
System.out.println(fruits); // [망고, 바나나, 딸기]
// 5. remove(index): 특정 위치의 요소 삭제
fruits.remove(2);
System.out.println(fruits); // [망고, 바나나]
// 6. contains(): 특정 요소가 있는지 확인
System.out.println(fruits.contains("망고")); // true
ArrayList 순회 (for-each 루프)
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
// for-each 방식 (가장 깔끔)
for (int num : numbers) {
System.out.println(num); // 10, 20, 30 순서로 출력
}
2. LinkedList
LinkedList는 내부적으로 각 데이터가 자신의 앞뒤 데이터의 주소를 기억하는 "체인(연결 고리)" 구조로 되어있습니다.
ArrayList vs LinkedList 어떤 것을 쓸까?
작업 ArrayList LinkedList 인덱스로 조회 ( get)⭐ 빠름 느림 중간에 데이터 삽입/삭제 느림 ⭐ 빠름
- 조회가 많고 수정이 적다면 →
ArrayList사용- 중간 삽입/삭제가 빈번하다면 →
LinkedList사용(실무에서는 대부분의 상황에서
ArrayList가 기본 선택입니다.)
import java.util.LinkedList;
LinkedList<String> queue = new LinkedList<>();
// LinkedList를 큐(Queue)처럼 사용: 먼저 들어온 것이 먼저 나감 (FIFO)
queue.add("첫 번째");
queue.add("두 번째");
queue.add("세 번째");
// 앞에서부터 꺼내기
System.out.println(queue.poll()); // 첫 번째 (꺼내면서 삭제)
System.out.println(queue.poll()); // 두 번째
System.out.println(queue); // [세 번째]