Array vs Linked List

정규화

  • Array

    • 연속 메모리

    • 한꺼번에 할당되고, 한꺼번에 해제된다

    • Random Access에 강하다. Array[index], O(1)

    • 중간 삽입/삭제에 약하다. (단, 배열 끝은 괜찮다) O(n)

    • Cache Miss가 잘 일어나지 않는다

      • Array[index]를 메모리에서 가져오게되면, Array[index] 근처 데이터를 Cache에 저장

    • 요소가 사라질 때마다 GC 되지 않는다

      • Array의 특정 요소를 안쓰더라도, 저절로 사라지지 않는다. (한꺼번에 사라진다)

  • Linked List

    • 불연속 메모리 - 필요한 만큼 메모리 사용

    • Graph의 일종 (Linked List and Tree) 노드와 Edge로 이루어져있는 것

    • Single Linked List, Double Linked List

      • Single Linked List는 Edge가 한개

      • Double Linked List는 Edge가 두개

    • Randoomo Access에 약하다. O(n)

    • 삽입, 삭제에 효율적. O(1)

    • Cache Miss가 잘 일어남

      • 불연속 메모리이기 때문에, 근처에 없을 가능성이 크다

    • 요소가 사라질때 GC가 일어남

      • 노트 하나가 없어질때마다, 포인터/값이 GC된다.

Last updated