Java/자바 정리

139. ArrayList vs LinkedList 성능 비교

코딩하는냥이 2025. 5. 20. 11:56
반응형

자바에서 리스트(List)를 구현하는 대표적인 클래스는 ArrayList와 LinkedList입니다.
둘 다 List 인터페이스를 구현하지만, 내부 구조가 달라 삽입·삭제·검색 속도에 차이가 있습니다.
이번 예제에서는 두 리스트의 앞쪽에 데이터를 삽입할 때 걸리는 시간을 비교해보겠습니다.


📌 예제 코드

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

public class LinkedListExample {
	public static void main(String[] args) {
		List<String> list1 = new ArrayList<String>();
		List<String> list2 = new LinkedList<String>();
		long startTime, endTime;
		
		startTime = System.nanoTime();
		for(int i = 0; i < 10000; i++)
			list1.add(0, String.valueOf(i));
		endTime = System.nanoTime();
		System.out.printf("%-18s %8d ns\n", "ArrayList 걸린 시간: ", endTime - startTime);

		startTime = System.nanoTime();
		for(int i = 0; i < 10000; i++)
			list2.add(0, String.valueOf(i));
		endTime = System.nanoTime();
		System.out.printf("%-18s %8d ns\n", "LinkedList 걸린 시간: ", endTime - startTime);
	}
}

💻 실행 결과 (예시)

ArrayList 걸린 시간:     3645800 ns
LinkedList 걸린 시간:      528200 ns

※ 실행 결과는 환경에 따라 차이가 날 수 있습니다.
하지만 일반적으로 앞쪽 삽입은 LinkedList가 훨씬 빠릅니다.


💬 코드 설명

  • ArrayList는 내부적으로 배열을 사용하므로, 앞에 데이터를 추가할 때마다
    기존 데이터를 모두 뒤로 밀어내야 하여 시간이 오래 걸립니다.
  • LinkedList는 각 요소가 포인터로 연결되어 있기 때문에,
    앞쪽 삽입 시 기존 요소들을 이동시키지 않고도 연결만 변경하면 되므로 빠릅니다.
  • System.nanoTime()을 사용해 각각의 삽입 작업에 소요된 시간을 측정합니다.

💡 포인트 정리

  • ArrayList는 검색 속도는 빠르지만 삽입/삭제는 느릴 수 있습니다.
  • LinkedList는 중간 삽입·삭제에는 유리하지만, 검색 속도는 느립니다.
  • 앞쪽에 많은 데이터를 추가해야 할 경우 LinkedList가 성능상 유리합니다.
  • 데이터 삽입 위치나 조회 빈도에 따라 적절한 리스트 구현체를 선택하는 것이 중요합니다.

📌정리하자면, ArrayList와 LinkedList는 상황에 따라 성능이 크게 달라질 수 있는 컬렉션입니다.
이번 실습을 통해 특정 위치에 반복적으로 데이터를 추가할 때 구조적인 차이가 성능에 얼마나 영향을 주는지 확인할 수 있었습니다.
따라서 데이터 처리 방식에 따라 두 구현 클래스 중 알맞은 컬렉션을 선택하는 것이 자바 프로그래밍에서 매우 중요합니다.