0
번째 주소 + (배열원소타입 크기 x 인덱스)를 계산하여 데이터 조회한다.O(1)
O(n)
O(n)
이미지 출처 :: 🧱 ArrayList vs LinkedList 특징 & 성능 비교
capacity
)이 꽉 차거나, 요소 중간에 삽입을 행하려 할때 기존의 배열을 복사해서 요소를 뒤로 한칸씩 일일히 이동해야 한다.ArrayList
에서는 그 공간 만큼 낭비되는 메모리가 많아지게 되고 또한 리사이징 처리에서 시간이 소모된다.O(n)
O(1)
(맨 앞이나 맨 뒤 요소만)O(1)
(맨 앞이나 맨 뒤 요소만)link
)한 형태로 구성되어있기 때문에 공간의 제약이 존재하지 않는다.이미지 출처 :: 🧱 ArrayList vs LinkedList 특징 & 성능 비교
LinkedList
는 메모리 이곳저곳에 산재해 저장되어 있는 노드들을 접근하는데 있어 ArrayList
보다 당연히 긴 지연 시간이 소모되게 된다. LinkedLis
t의 노드 같은 경우 데이터 이외에 next
나 prev
같은 참조자도 저장해야 되기 때문에 추가적인 공간이 더 필요하다.첫번째 위치에 insert / remove
LinkedList (doubly)
: O(1)
ArrayList
: O(N)
마지막 위치에 insert / remove
LinkedList (doubly)
: O(1)
ArrayList
: O(1)
/ O(N)
중간에 insert / remove
LinkedList (doubly)
: O(N) / search time + O(1)
ArrayList
: O(1)
/ O(N)
값으로 search
LinkedList (doubly)
: O(N)
ArrayList
: O(1)
/ O(N)
인덱스로 값 get
LinkedList (doubly)
: O(N)
ArrayList
: O(1)
값으로 remove
LinkedList (doubly)
: O(N)
ArrayList
: O(N)
시간복잡도 차수 낮은 순서 🧶🪡
:O(1)
>O(log n)
>O(n)
>O(n log n)
>O(n^2)
>O(n!)
보통
ArrayList
와LinkedList
중에 어느걸 사용하면 되냐고 묻는다면, 삽입 / 삭제가 빈번하면LinkedList
를, 요소 가져오기가 빈번하면ArrayList
를 사용하면 된다고 한다. 🥽
-> 이에 대한 다른 의견들이 많아서 뭐가 맞는 건지 모르겠음 . . .
🧱 ArrayList vs LinkedList 특징 & 성능 비교
연결리스트 vs 배열리스트 선택하기 (+성능 향상 사례)