Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java ArrayList와 LinkedList의 차이점 완벽 비교

ArrayListLinkedList는 모두 Java에서 List 인터페이스를 구현한 대표적인 컬렉션 클래스입니다. 두 클래스 모두 기본적으로 동기화되지 않아(non-synchronized) 단일 스레드 환경에 적합하지만, 내부 구조와 성능 특성에서 중요한 차이점을 보입니다.

ArrayList와 LinkedList의 주요 차이점

번호구분ArrayListLinkedList
1 내부 구현 방식 내부적으로 동적 배열(dynamic array)을 사용하여 요소를 저장합니다. 이중 연결 리스트(doubly linked list)를 사용하여 요소를 저장합니다.
2 데이터 조작 속도 배열 기반이므로 삽입·삭제 시 요소 이동이 발생해 조작이 느립니다. 노드 기반으로 연결 정보만 변경하면 되기 때문에 삽입·삭제가 빠릅니다.
3 구현 인터페이스 List 인터페이스만 구현합니다. List뿐 아니라 Queue, Deque도 함께 구현하므로 큐나 덱으로도 활용할 수 있습니다.
4 데이터 접근 인덱스 기반 접근이 가능해 데이터 저장과 조회가 빠릅니다. 순차 탐색이 필요해 임의 접근은 느리지만, 데이터 조작(삽입·삭제)에 유리합니다.

ArrayList vs LinkedList 예제 코드

두 클래스는 사용법이 거의 동일하기 때문에 코드 작성 방식에는 큰 차이가 없습니다. 아래 예제를 통해 확인해 보겠습니다.

JavaTester.java

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class JavaTester {
    public static void main(String args[]) {
        // ArrayList 생성 및 데이터 추가
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");

        // LinkedList 생성 및 데이터 추가
        List<String> list1 = new LinkedList<>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
        list1.add("D");

        System.out.println(list);
        System.out.println(list1);
    }
}

실행 결과

[A, B, C, D]
[A, B, C, D]

어떤 것을 선택해야 할까?

선택 기준은 프로그램의 사용 패턴에 따라 달라집니다.

  • ArrayList를 추천하는 경우: 데이터 조회가 많고, 삽입·삭제가 주로 목록 끝에서 일어나는 경우. 인덱스를 통한 빠른 임의 접근이 필요한 경우에 적합합니다.
  • LinkedList를 추천하는 경우: 목록 중간에서 빈번한 삽입·삭제가 발생하는 경우, 또는 큐(Queue), 스택(Stack)처럼 순차적인 데이터 처리 구조가 필요한 경우에 적합합니다.

일반적으로 대부분의 상황에서는 캐시 지역성(cache locality)이 좋고 조회 성능이 우수한 ArrayList가 기본 선택지로 권장됩니다.