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