본문 바로가기

Programming/Java

JAVA ArrayList vs LinkedList 차이점과 선택 기준

반응형

자바에서 리스트(List) 형태의 데이터를 저장할 때 가장 많이 사용하는 자료구조는 ArrayListLinkedList이다. 두 클래스는 List 인터페이스를 구현하지만 내부 구조와 동작 방식이 다르다. 이번 포스팅에서는 ArrayListLinkedList의 차이를 비교하고, 어떤 상황에서 각각을 사용하는 것이 좋은지 알아보겠다.

1. 기본 개념

ArrayList

  • ArrayList는 내부적으로 배열을 사용하여 데이터를 저장한다.
  • 인덱스를 이용한 데이터 접근 속도가 빠르다 (O(1)).
  • 요소를 추가하거나 삭제할 때 배열을 재구성해야 하는 경우가 있어 속도가 느려질 수 있다 (O(n)).
  • 메모리에서 연속된 공간을 차지하므로 캐시 효율성이 좋다.

사용 예제

List<String> arrayList = new ArrayList<>();
arrayList.add("A");
arrayList.add("B");
arrayList.add("C");
System.out.println(arrayList.get(1)); // 출력: B

LinkedList

  • LinkedList는 내부적으로 이중 연결 리스트(Doubly Linked List) 구조를 사용한다.
  • 요소를 추가하거나 삭제하는 속도가 빠르다 (O(1)) (단, 특정 위치를 찾는 과정은 느림 O(n)).
  • 노드가 메모리 여기저기 흩어져 있어서 캐시 효율성이 낮다.
  • 각 요소가 다음 요소와 이전 요소의 참조를 가지고 있어 메모리 사용량이 상대적으로 많다.

사용 예제

List<String> linkedList = new LinkedList<>();
linkedList.add("A");
linkedList.add("B");
linkedList.add("C");
System.out.println(linkedList.get(1)); // 출력: B

 

2. 주요 차이점 비교

비교 항목 ArrayList LinkedList
내부 구조 동적 배열 이중 연결 리스트
요소 접근 속도 빠름 (O(1)) 느림 (O(n))
요소 추가/삭제 속도 느림 (O(n)) 빠름 (O(1))
메모리 사용량 상대적으로 적음 추가적인 참조(포인터)로 인해 많음
순차 접근 성능 빠름 느림
랜덤 접근 성능 빠름 느림

 

3. 언제 사용해야 할까?

사용 상황 추천 컬렉션
데이터 조회가 빈번한 경우 ArrayList
데이터 추가/삭제가 빈번한 경우 LinkedList
요소를 인덱스로 자주 검색해야 할 때 ArrayList
중간 삽입/삭제가 자주 발생할 때 LinkedList

 

4. 결론

  • ArrayList는 인덱스 기반으로 요소를 빠르게 조회할 수 있으며, 데이터 접근이 많은 경우에 적합하다.
  • LinkedList는 요소의 추가/삭제가 빈번한 경우 유리하지만, 인덱스를 통한 조회 성능은 떨어진다.
  • 일반적으로 대부분의 경우 ArrayList를 사용하며, 삽입/삭제가 많을 때 LinkedList를 고려하면 된다.
반응형