고기와 감자를 잘게 다져 요리한 해쉬브라운에서 유래되었다. 입력받은 수를 잘게 다져 입력한 것과 비슷하여 해시라는 이름을 가지게 되었다.
데이터를 다루는 기법 중 하나로 검색과 저장이 빠르게 진행을 할 수 있는 선형자료 알고리즘이다.
데이터를 검색할 때 사용할 key와 실제 데이터의 값이 한 쌍으로 존재하고, key값이 배열의 인덱스로 변환되기 떄문에 검색과 저장의 평균적인 시간 복잡도가 O(1)과 같아진다.

키와 값을 받아 키를 해싱(Hashing)하여 나온 index에 값을 저장하는 선형 자료구조이며 삽입은 O(1), 키를 알고 있으면 삭제,탐색도 O(1)로 수행이 된다.
입력받은 값을 특정 범위 내 숫자로 변경하는 함수, (지정된 방법은 없고 자유롭게 구현 가능)
ex)
충돌 : 해시 함수의 결과가 동일하여 겹칠 때 생기는 문제
같은 key를 가지고 있지만 다른 값을 가지고 있을 때 발생하는 현상





예를 들어 출석부 처럼 번호와 이름이 한 쌍으로 이뤄져있는 경우 유리하다. 번호는 키, 이름은 value값으로 지정 해주어 탐색이나, 삭제 기능을 쉽고 간편하게 사용할 수 있는 장점이 있다.

const table = {}
table['key'] = 100;
table['key2'] = 'hello';
table['key3'] = 1
delete table['key'] ;
// table = { 'key2' : 'hello', 'key3' : 1}
set, get, delete, keys() ... 다양한 메소드를 통해서 쉽게 데이터를 입출력 해 줄수가 있다.const table = new Map()
table.set ("key", 100);
table.set ("key2", 'hello');
table.set ('obj', {"a": 3}); //Map(3) {'key' => 100, 'key2' => 'hello', 'obj' => {'a': 3}}
table.get ('obj') // {'a' : 3}
table.keys() // {'key', 'key2', 'obj'}
table.delete('obj') Map(2) {'key' => 100, 'key2' => 'hello'}
table.clear() {}
const table = new Set()
table.add ("key");
table.add ("key2");
table.has('key') //true
table.delete('key') // ['key']