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

좋은 웹페이지 즐겨찾기