[javascript] Hash Map
JavaScript에서 해시맵(HashMap)은 데이터를 키-값 쌍으로 저장하고 효율적으로 검색, 삽입, 삭제를 할 수 있는 자료구조입니다. JavaScript의 Object 또는 Map 객체가 해시맵의 역할을 수행합니다. Map 객체는 ES6부터 도입된 더 정교한 해시맵 구현입니다.
Object를 사용한 해시맵
JavaScript의 일반 객체({})는 간단한 해시맵으로 사용될 수 있습니다. 키는 문자열이나 심볼이 되며, 값을 저장하고 검색하는데 사용됩니다. 다만, 키가 문자열 또는 심볼로 제한되어 있다는 점과, 객체의 프로토타입 상속으로 인해 예상치 못한 키 충돌이 발생할 수 있다는 단점이 있습니다.
예시 코드:
let hashMap = {};
// 값 저장
hashMap["key1"] = "value1";
hashMap["key2"] = "value2";
// 값 검색
console.log(hashMap["key1"]); // "value1"
console.log(hashMap["key2"]); // "value2"
// 키 존재 여부 확인
console.log("key1" in hashMap); // true
console.log("key3" in hashMap); // false
// 키-값 쌍 삭제
delete hashMap["key1"];
console.log("key1" in hashMap); // false
Map 객체를 사용한 해시맵
Map 객체는 키-값 쌍을 저장하는 데 사용되며, 키에 다양한 자료형(문자열, 숫자, 객체 등)을 사용할 수 있습니다. Map은 순서를 유지하며, 키의 중복을 허용하지 않습니다. 또한, Map은 메모리에서 키에 대한 참조를 유지하지 않으므로 메모리 누수의 위험이 적습니다.
예시 코드:
let map = new Map();
// 값 저장
map.set("key1", "value1");
map.set("key2", "value2");
// 값 검색
console.log(map.get("key1")); // "value1"
console.log(map.get("key2")); // "value2"
// 키 존재 여부 확인
console.log(map.has("key1")); // true
console.log(map.has("key3")); // false
// 키-값 쌍 삭제
map.delete("key1");
console.log(map.has("key1")); // false
// 순회
map.forEach((value, key) => {
console.log(key + ": " + value);
});
Map 객체는 이터러블이기 때문에 forEach 메서드나 for...of 루프를 사용하여 요소들을 순회할 수 있습니다. 이러한 특성은 Object와 비교했을 때 Map이 더욱 유연하고 강력한 해시맵 구현을 제공한다는 것을 의미합니다.
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)
}
1) Map.length: 값이 0인 속성.
2) Map.size: 맵의 키-값 쌍 갯수
3) Map.clear(): 맵 초기화
4) Map.entries(): 맵의 모든 키-값 쌍을 [key, value] 형태의 array로 만들어서 반환
5) Map.forEach(): 맵의 모든 키-값 쌍에 대해서 콜백함수 사용
6) Map.get(key): key값에 맞는 value값 반환
7) Map.delete(key): key-value 쌍 삭제
8) Map.has(key): 해당 key가 Map에 포함되어 있는지 확인
9) Map.keys(): 맵의 모든 key들을 반환
10) Map.set(key, value): 맵에 key-value 쌍을 집어넣음