Post

[Interview] Array, ArrayList, Linked List의 차이

Array, Arraylist, Linked List차이

Array

  • 크기 고정: 생성시 크기가 고정, 동적으로 크기를 조절하기 어려움
  • 연속적인 메모리 할당: 원소들은 연속적으로 메모리에 할당되어 있어 인덱스를 통한 빠른 접근 가능
  • 크기 변경 *오버헤드: 크기를 변경하려면 새로운 배열을 할당하고 이전의 원소를 복사해야 함
    • 새로운 배열 할당
    • 기존 원소의 복사
    • 기존 배열의 할당 해제(Java의 경우 Garbage Collection)

**오버헤드: 어떤 작업을 수행하기 위해 필요 이상으로 들어가는 비용*

시간 복잡도

O(1)

  • 인덱스를 통한 탐색

O(n)

  • 삽입. 삭제(후 처리로 다른 원소들을 이동시켜야 하기 때문)
  • 전체, 특정 값 탐색

ArrayList

  • 가변 크기: 동적으로 크기를 조절할 수 있는 배열 기반의 자료구조
    • Array의 크기를 조절하는 방식과 같지만 이를 내부적으로 구현해 사용자가 직접 관여할 필요가 없음

시간 복잡도

O(1)

  • 인덱스를 통한 탐색

O(n)

  • 삽입. 삭제(후 처리로 다른 원소들을 이동시켜야 하기 때문)
    • 기본적으로 배열과 같지만 동적으로 메모리에 새롭게 할당해야 하기 때문에 성능은 더 안 좋을 수 있음
  • 전체, 특정 값 탐색

LInked List

  • 가변 크기: 동적으로 크기 조절 가능
  • 불연속적 메모리 할당: 각 노드가 다음 노드를 가리키는 포인터를 가지므로 불연속적으로 메모리에 할당
    • 따라서 접근속도가 느림
  • 데이터 삽입 및 삭제 용이: 중간에 데이터를 추가하거나 삭제할 때 해당 노드의 포인터만 조절하면 되므로 효율적

시간 복잡도

O(1)

  • 처음이나 끝의 삽입, 삭제
  • 삽입 및 삭제 그 자체

O(n)

  • 탐색
  • 특정 위치의 삽입, 삭제
This post is licensed under CC BY 4.0 by the author.