해당 포스팅은 연결된 링크를 보고 이해한 내용을 정리합니다.
[자료구조] 배열: 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료 구조
하나의 타입으로 통일, 서로 연속적으로 인접함 = 밀집 배열(dense array)
인덱스를 통해 단 한번의 연산으로 임의의 요소에 접근(임의 접근: random access), 시간 복잡도 O(1)
= 효율, 고속 동작
검색 대상 요소의 메모리 주소 = 배열의 시작 메모리 주소 + 인덱스 * 요소의 바이트 수
ex) 위의 그림 기준
- 인덱스가 0인 요소의 메모리 주소: 1000 + 0 * 8 = 1000
- 인덱스가 3인 요소의 메모리 주소: 1000 + 3 * 8 = 1024
But, 정렬되지 않은 배열에서 특정한 값을 탐색하는 경우에는 모든 배열 요소를 처음부터 값을 발견할 때까지 차례대로 탐색(선형 탐색: linear search), 시간 복잡도 O(n)해야 함
배열에 요소를 삽입하거나 삭제하는 경우
배열 요소를 `연속적`으로 유지하기 위해 요소를 이동시켜야 함
[JS의 배열]
각각의 메모리 공간이 동일한 크기를 갖지 않아도 Ok
연속적으로 이어져 있지 않을 수 O: `희소 배열(sparse array)`
=> 일반적인 배열의 동작을 흉내낸 특수한 객체
인덱스를 프로퍼티 키로 갖으며, `length`프로퍼티를 갖는 특수한 객체!
따라서, JS 배열의 요소는 결국 프로퍼티의 값
JS에서 사용할 수 있는 모든 값은 어떤 타입의 값이라도 배열의 요소가 될 수 O
const arr = [
'string',
10,
true,
null,
undefined,
NaN,
Infinity,
[ ],
{ },
function () {}
];
일반적인 배열 | 자바스크립트 배열 |
인덱스로 배열 요소에 빠르게 접근 but, 특정 요소 탐색 / 요소 삽입 / 삭제 경우에는 효율 X |
해시 테이블로 구현된 객체이므로 인덱스로 배열 요소에 접근할 시, 일반적 배열보다 느림 but, 특정 요소 탐색 / 요소 삽입 / 삭제에는 효율 O |
'JS' 카테고리의 다른 글
JAVASCRIPT05 (0) | 2024.08.17 |
---|---|
정규표현식(Regular Expression) (0) | 2024.08.13 |
JAVASCRIPT04 (0) | 2024.08.13 |
JAVASCRIPT03 (0) | 2024.08.09 |
JAVASCRIPT02 (0) | 2024.08.02 |