Javascript (Set, Map)

서동수·2022년 8월 28일
0

Set
중복을 허용하지 않는 데이터 집합으로 배열과 비슷하다.
값 컬렉션으로 삽입 순서를 기억하며 값은 중복없이 유일하다.

Map
(https://www.jiwon.me/v8-deep-dives-understanding-map-internals/)
key, value를 연결해 저장하며 저장 순서를 보장하는 데이터 구조로 객체와 비슷하다.
key는 중복될 수 없고 value는 당연히 중복이 가능하다.

특징
1. 객체 사용시 프로토타입 체인으로 인한 의도하지 않은 연결발생 상황을 방지
2. 키, 값의 갯수를 쉽게 파악
3. 키의 자료형이 심볼, 문자열이아닌 모든 타입가능
4. 프로퍼티의 순서를 보장 (HashTable로 구현되어 있지만 순서를 보장하는데 결정론적 해시 테이블 알고리즘을 사용한다.)
5. 만약 테이블이 항목으로 가득차면 다시 해싱을 진행해야 한다.
(V8에서 해시테이블의 저장용량은 2의 거듭제곱과 같은데 버킷 * 2 === 저장용량)


interface Entry {
	key: any;
    value: any;
	chain: number; // 다음 버킷 체인을 가리키는 정보를 담고 있음(단방향 링크드 리스트)
}

interface CloseTable { // 해쉬테이블
	hashTable: number[]; // 버킷과 동일한 크기의 배열(n번째 요소는 n번째 버킷), dataTable을 가리키는 인덱스를 저장한다.
    dataTable: Entry[]; // Entry들을 삽입 순서에 따라 저장, 삭제시 여기서 삭제되며 공간은 undefined로 차지하고 있다.
	nextSlot: number; // 새로운 항목이 삽일 될때마다 dataTable의 index가 여기에 저장
    size: number;
}
profile
devLog

0개의 댓글