본문 바로가기

Java 오류 & 개발/Java 기본 문법 & 오류

[Java 기본 문법 & 오류] Java ArrayList와 LinkedList 차이 및 활용법

[Java] ArrayList와 LinkedList 차이 및 활용법

1. ArrayList와 LinkedList란?

Java에서 ArrayListLinkedList는 대표적인 리스트(List) 자료구조입니다.

두 컬렉션 클래스는 서로 다른 방식으로 데이터를 저장하며, 특정 연산에서 성능 차이가 발생합니다.

2. ArrayList와 LinkedList 기본 사용법

먼저 두 리스트를 생성하는 기본 코드입니다.


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

public class ListExample {
    public static void main(String[] args) {
        List arrayList = new ArrayList<>();
        List linkedList = new LinkedList<>();
    }
}

✅ 위 코드에서는 ArrayList와 LinkedList를 각각 생성했습니다.

3. ArrayList vs LinkedList 비교

비교 항목 ArrayList LinkedList
데이터 저장 방식 배열 기반 (연속된 메모리 공간) 이중 연결 리스트 (노드 구조)
데이터 접근 속도 빠름 (O(1)) - 인덱스를 통해 직접 접근 느림 (O(n)) - 순차 탐색 필요
데이터 삽입/삭제 속도 느림 (O(n)) - 중간 삽입/삭제 시 요소 이동 필요 빠름 (O(1) ~ O(n)) - 노드 포인터 변경만 필요
메모리 사용량 낮음 - 추가적인 포인터 필요 없음 높음 - 각 노드마다 포인터를 저장해야 함

4. 성능 테스트 예제

ArrayList와 LinkedList의 데이터 삽입 속도를 비교하는 코드입니다.


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

public class PerformanceTest {
    public static void main(String[] args) {
        List arrayList = new ArrayList<>();
        List linkedList = new LinkedList<>();

        long startTime, endTime;

        // ArrayList 추가 속도 측정
        startTime = System.nanoTime();
        for (int i = 0; i < 100000; i++) {
            arrayList.add(i);
        }
        endTime = System.nanoTime();
        System.out.println("ArrayList 추가 시간: " + (endTime - startTime) + " ns");

        // LinkedList 추가 속도 측정
        startTime = System.nanoTime();
        for (int i = 0; i < 100000; i++) {
            linkedList.add(i);
        }
        endTime = System.nanoTime();
        System.out.println("LinkedList 추가 시간: " + (endTime - startTime) + " ns");
    }
}

5. ArrayList가 유리한 경우

  • 데이터 접근이 빈번한 경우 (인덱스를 통한 빠른 조회)
  • 메모리 사용량을 줄이고 싶을 때
  • 중간 삽입/삭제가 적고, 주로 데이터를 추가하고 읽는 경우

6. LinkedList가 유리한 경우

  • 중간 삽입/삭제가 빈번한 경우
  • 데이터 크기가 클 때 (메모리 조각화를 방지 가능)
  • 메모리 재할당 없이 리스트 크기를 유동적으로 관리할 때

7. 최종 정리

상황 추천 컬렉션
빠른 데이터 조회가 필요할 때 ArrayList
중간 삽입/삭제가 많을 때 LinkedList
메모리를 효율적으로 사용하고 싶을 때 ArrayList
데이터 구조 변경이 많을 때 LinkedList

8. 결론

ArrayList와 LinkedList는 각각의 장점과 단점이 있으며, 상황에 맞게 적절한 컬렉션을 선택해야 합니다.

일반적인 경우에는 ArrayList가 더 효율적이며, 삽입/삭제가 많다면 LinkedList를 고려하는 것이 좋습니다.


🔗 다른 Java 관련 글도 함께 확인해보세요!

Java HashMap과 HashTable의 차이