본문으로 건너뛰기
Advertisement

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 어떤 것을 쓸까?

작업ArrayListLinkedList
인덱스로 조회 (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); // [세 번째]
Advertisement