JS Map 과 해시맵
1. 해시(Hash)란
1.1 해시 테이블 (Hash Table)
- 자료구조의 종류 중 하나 (ex. Array, Object 등)
- key와 value를 가지는 자료구조 형태
- 배열에서는 key값에 숫자만 가능하지만, Hash Table에서는 문자열 또한 Key (Map에서는 함수도 가능)
- Hash Function을 통해 빠른 탐색이 가능 -> O(1)
1.2 해시 함수 또는 해시 (Hash Function)
- key와 연결되어 있는 value를 삽입, 삭제, 탐색하는 알고리즘 함수
- 알고리즘 함수의 종류는 많지만, 대표적으로 MDS 함수가 존재
- key가 들어오면 Random하게 주소값을 생성한 후, 해당 주소값에 key와 value를 저장
- 해시함수 과정에서 해시충돌이 일어날 수 있음
2. 해시테이블 : Map
JS에서 해시테이블은 대표적으로 Object, Map, Set이 있다. JS에서 key-value로 이루어진 자료구조는 Object가 대표적이였지만, ES6에서 Map과 Set이 추가되었다.
2.1 Map 객체란?
- 주로 Object와 비교됨
- key-value로 이루어진 해시 테이블
- 탐색은 get(), 삽입은 set()으로 한다.
- key는 고유값으로써, 단 한개만 존재한다.
- key 가능 자료형 : number, string, function, object, NaN
2.2 Map의 함수들
2.2.1 value 설정 : set()
let map = new Map();
let number = 0;
let str = 'string';
let obj = { a: 1 };
let fnc = () => {
console.log('fnc');
};
map.set(number, 4); //key에 number 가능
map.set(str, 1); // key에 string 가능
map.set(obj, 2); //key에 object 가능
map.set(fnc, 3); // key에 함수 가능
map.set(number, 0); // 덮어쓰기 가능
console.log(map); // Map(4) {0 => 0, "string" => 1, {…} => 2, ƒ => 3}
2.2.2 value 얻기 : get()
//위의 코드 재사용..
map.get(str); // 1
map.get(obj); // 2
map.get('none'); // undefined
map.get({ a: 1 }); // undefined, obj !== { a: 1 }
2.2.3 value 찾기 : has()
//위의 코드 재사용..
map.has(str); // true
map.has(obj); // true
map.has('none'); // false
2.2.4 value 삭제 : delete()
//위의 코드 재사용..
map.delete(str); // true
map.get('none'); // false
2.2.5 value 존재유무 : size
map.size // 4
map.length // undefined
2.2.6 hash 탐색 : for-of 문
//key, value 쌍으로 출력
for (let [key, value] of map) {
console.log(key + ' = ' + value)
}
//key만 출력
for (let key of map.keys()) {
console.log(key)
}
//value만 출력
for (let value of map.values()) {
console.log(value)
}
출처
https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98
Author And Source
이 문제에 관하여(JS Map 과 해시맵), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jun094/Hash와-Map저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)