ArrayList vs LinkedList

최찬호·2023년 3월 18일
0

ArrayList

  • 연속된 메모리 공간에 저장이 된다
  • 인덱스를 통한 접근(Random Access)가 가능하다
  • CPU Cache를 통해 같은 배열에 있는 다른 데이터에 접근하는 시간을 단축할 수 있다.
  • 데이터의 삽입/삭제시 데이터시프트에 의한 O(N)의 시간이 소요될 수 있다.
  • 동적배열의 추가적인 크기증가를 위한 기존배열을 복사하는데 시간이 소요된다.
  • 데이터탐색에는 O(N)의 시간이소요된다.

삽입/삭제

맨앞에 데이터를 삽입/삭제시 데이터시프트에 의한 O(N)의 시간소요
맨뒤에서 데이터를 삽입/삭제시 배열의 확장이 필요하지 않다면 O(1)의 시간소요
중간에 데이터를 삽입/삭제시 O(N)의 시간소요. 메모리에 빈공간이 존재한다고 배열의 사이즈를 줄이지는 않는다.

LinkedList

  • 메모리상에 각 노드들이 산재되어 생성되어 있으며 현재노드와 다음노드를 가리키는 포인터로 노드들을 연결시키는 형태로 구현
  • 데이터에 접근할 때 head혹은 tail로 부터 순차적인 접근이 가능하다
  • 데이터 삽입/삭제시 해당 데이터위치까지 이동하기 위한 시간 O(N)이 소요된다.
  • 데이터탐색에는 O(N)의 시간이소요된다.

삽입/삭제

맨앞에 데이터를 삽입/삭제시 O(1)의 시간소요
맨뒤에서 데이터를 삽입/삭제시 tail이 존재한다면 O(1), tail이 존재하지 않는다면 데이터위치까지 접근하기 위한 O(N)의 시간소요
중간에 데이터를 삽입/삭제시 해당지점까지 도달하기위한 시간소요

비교

ArrayListLinkedList
구현배열로 구현노드와 포인터
데이터접근시간O(1)O(N)
삽입/삭제O(N)O(N)
크기확장O(N)O(1)
검색O(N)O(N)
CPU CACHECPU CACHE 이점활용x
profile
체득하고 이해하자

0개의 댓글