객체는 정렬되어 있을 필요가 없을 때 잘 작동합니다. 그리고 빠른 접근, 입력과 제거를 원할 때 좋습니다. 빠르다고 했을 때 입력, 제거, 접근하는 시간은 상수시간 입니다.
- Insertion :
O(1)
- Removal :
O(1)
- Searching :
O(N)
- Access :
O(1)
- Object.keys :
O(N)
- Object.values :
O(N)
- Object.entries :
O(N)
- hasOwnProperty :
O(1)
객체와는 다르게 배열은 정렬이 되어 있습니다. 그냥 한 뭉치로 있는 객체와는 다릅니다. 그리고 엘리먼트마다 붙어있는 인덱스가 존재합니다. 따라서 배열은 대부분 정렬되어 있는 데이터를 위해서 사용합니다.
- Insertion : It depends...
- Removal : It depends...
- Searching :
O(N)
- Access :
O(1)
배열 끝에 요소를 추가하는 메소드인 push()
를 이용할 경우 O(1)
로 상수시간입니다. 하지만 배열의 앞에 요소를 추가하게 될 경우 기존에 배열마다 가지고 있는 인덱스를 새로 배정해야 합니다. 그렇기 때문에 배열 앞에 요소를 추가한다면 O(N)
의 시간이 소요됩니다. 앞에서 제거하는 것도 같은 문제입니다. 제일 앞에 있는 요소를 삭제할 경우 인덱스를 반대 방향으로 다시 배정해야 합니다.
즉, 비어있는 배열을 제외한다면 push()
, pop()
은 shift()
, unshift()
작업보다 빠릅니다. 아래 Big-o of Array Operations을 보겠습니다.
- push :
O(1)
- pop :
O(1)
- shift :
O(N)
- unshift :
O(N)
- concat :
O(N)
- slice :
O(N)
- splice :
O(N)
- sort :
O(NlogN)
- forEach/map/filter/reduce/etc. :
O(N)