
객체는 모든 것을 더 빠르게 하지만, 정렬되어 있지 않다.
let instructor = {
firstName: 'Kelly',
isInstructor: true,
favoriteNumbers: [1,2,3,4],
}
이 객체 리터럴에는 instructor이라는 변수에 key value 3개를 저장하고 있다.
자바스크립트는 어떤 정보를 객체 안에 상수 시간안에 저장할 수 있다.
Insertion - O(1)
Removal - O(1)
Searching - O(N) -> 어떤 특정한 정보가 어떤 값에 있는지 확인
Access - O(1)
배열은 정렬되어 있지만, 끝에 추가하고 제거하는 것이 시작에 추가하고 제거하는 것보다 훨씬 빠르다는 것이다.
let names = ["Michael", "Melissa", "Andrea"];
let values = [true, {}, [], 2, "awesome"];
Insertion - 어디에 입력하는지에 따라 다르다 : 뒤에 입력하는 것은 기존의 인덱스에 변화가 생기지 않아 상수 시간이 걸리지만 앞에 입력을 하면 기존의 인덱스가 다 깨지므로 엘리멘트마다 하나씩 작업해야 하므로 O(N) 시간이 걸린다.
Removal - 어디에 입력하는지에 따라 다르다 : 제거도 마찬가지다. 뒤에 있는 것을 지우는 것은 변화가 생기지 않지만 앞에 제거를 하면 인덱스를 다 엘리멘트마다 작업해줘야 하므로 O(N) 시간이 걸린다.
Searching - O(N)
Access - O(1)
배열에는 인덱스가 있어서 자바스크립트는 원하는 인덱스로 바로 갈 수 있다.
그렇기 때문에 배열이 얼마나 긴지는 중요하지 않다.
push - O(1)
pop - O(1)
shift - O(N)
unshift - O(N)
concat - O(N) -> 여러 배열을 합쳐준다
slice - O(N) -> 배열을 가져온다
splice - O(N) -> 엘리멘터를 제거하고 추가한다.
sort - O(N * log N)
forEach/map/filter/reduce/etc. - O(N)
객체와 배열을 봤을 때 가장 중요한 점은 객체는 모든 것을 더 빠르게 하지만, 정렬되어 있지 않고 배열은 정렬되어 있지만, 끝에 추가하고 제거하는 것이 시작에 추가하고 제거하는 것보다 훨씬 빠르다는 것이다.