포스트

Array vs List: ArrayList와 LinkedList

Array vs List: ArrayList와 LinkedList

Array

  • 연속된 메모리 공간에 같은 타입의 데이터를 순차적으로 저장하는 자료구조
  • 인덱스를 통해 O(1)에 접근 가능
  • 크기 변경은 보통 재할당이 필요

List (ADT)

  • 순서를 가지며 추가, 삭제, 탐색이 가능한 추상 자료형
  • 구현체에 따라 성능이 달라진다

List 구현 방법

  • Array (ArrayList)
  • Linked node (LinkedList)

ArrayList

  • Array를 이용하여 List를 구현
  • 장점
    • 인덱스를 통해 O(1)에 접근 가능
    • 연속 메모리로 캐시 효율이 좋다
  • 단점
    • 중간 삽입/삭제 시 O(n)
    • 크기 확장 시 재할당 비용 발생

LinkedList

  • Linked node를 이용하여 List를 구현
  • 장점
    • 중간 삽입/삭제가 O(1) (노드 참조가 있을 때)
    • 크기 제약이 없다
  • 단점
    • 인덱스 접근이 O(n)
    • 포인터 오버헤드로 캐시 효율이 낮다

연산 복잡도 비교

연산ArrayListLinkedList
인덱스 접근O(1)O(n)
중간 삽입/삭제O(n)O(1) (참조 보유 시)
끝 삽입평균 O(1)O(1)
메모리 locality좋음나쁨

선택 기준

  • 데이터 접근이 빈번하고 캐시 효율이 중요하면 ArrayList
  • 중간 삽입/삭제가 많고 노드 참조를 유지한다면 LinkedList
  • 단순 순회/읽기 위주면 ArrayList가 유리한 경우가 많다

정리

  • List는 ADT이고 Array/LinkedList는 구현체다
  • 상황에 따라 접근 패턴, 삽입/삭제 위치, 메모리 특성을 보고 선택한다
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.