JAVASCRIPT

Map()

seo dori 2023. 5. 28. 19:10

코테 문제를 풀다가 MAP을 만났다. 해시 문제....

Map 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억합니다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있습니다.

const map1 = new Map();

map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);

console.log(map1.get('a'));
// Expected output: 1

map1.set('a', 97);

console.log(map1.get('a'));
// Expected output: 97

console.log(map1.size);
// Expected output: 3

map1.delete('b');

console.log(map1.size);
// Expected output: 2

 

나는 object와 Map의 차이점을 알고싶었다.

from chatGpt

JavaScript에서 `Map`과 객체(Object)는 서로 다른 데이터 구조입니다.

1. Key의 형태:
   - 객체(Object): 객체의 속성은 문자열 또는 심볼(Symbol) 형태의 키를 가집니다. 객체의 속성은 순서가 없이 저장됩니다.
   - Map: `Map`은 어떤 데이터 타입도 키로 사용할 수 있습니다. 숫자, 문자열, 객체 등을 키로 사용할 수 있으며, 요소는 삽입된 순서대로 저장됩니다.

2. 메서드:
   - 객체(Object): 객체는 내장 메서드를 제공하지 않습니다. 그러나 프로토타입 체인을 통해 상속된 메서드를 사용할 수 있습니다.
   - Map: `Map`은 다양한 유용한 메서드를 제공합니다. 예를 들어, `set()`으로 요소를 추가, `get()`으로 요소를 가져오는 등의 메서드를 사용할 수 있습니다.

3. 이터레이션:
   - 객체(Object): 객체의 속성을 순회하기 위해 `for...in` 문을 사용합니다.
   - Map: `Map`은 `for...of` 문을 사용하여 요소를 순회할 수 있습니다.

4. 크기:
   - 객체(Object): 객체의 크기를 확인하기 위해서는 직접 속성을 카운트해야 합니다.
   - Map: `Map`은 `size` 프로퍼티를 통해 저장된 요소의 개수를 확인할 수 있습니다.

5. 키-값 쌍의 보장:
   - 객체(Object): 객체는 키-값 쌍을 저장할 때 순서를 보장하지 않습니다.
   - Map: `Map`은 키-값 쌍을 저장할 때 삽입된 순서를 보장합니다.

일반적으로 객체(Object)는 속성 기반의 데이터 구조로 사용되며, `Map`은 보다 다양한 키와 값의 조합을 다룰 수 있는 유연한 데이터 구조입니다. `Map`은 키-값 쌍의 순서를 보장하고 다양한 메서드를 제공하여 데이터를 다루기에 용이합니다. 객체는 주로 프로퍼티로 구성된 컨테이너로 사용되며, 객체의 속성은 문자열 또는 심볼로 제한됩니다.

 

해시 테이블: 맵이 해시 테이블로 구현된 경우, 요소의 검색 속도는 평균적으로 O(1)입니다. 즉, 요소를 직접 찾는 데 일정한 시간이 걸리며, 맵의 크기가 커져도 검색 시간은 거의 변하지 않습니다.

 

좀더 쉬운 예를 단편적으로 코드로 본다면

// Map 예시
const myMap = new Map();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
myMap.set('key3', 'value3');

console.log(myMap.get('key2')); // 출력: value2
console.log(myMap.size); // 출력: 3

for (let [key, value] of myMap) {
  console.log(key, value);
}
// 출력:
// key1 value1
// key2 value2
// key3 value3

// 객체 예시
const myObject = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3'
};

console.log(myObject['key2']); // 출력: value2
console.log(Object.keys(myObject).length); // 출력: 3

for (let key in myObject) {
  console.log(key, myObject[key]);
}
// 출력:
// key1 value1
// key2 value2
// key3 value3

 

해시 테이블(Hash table)은 데이터를 저장하고 검색하는 데 사용되는 효율적인 데이터 구조입니다. 해시 테이블은 키(Key)와 값(Value)의 쌍으로 데이터를 저장하며, 키를 통해 값을 빠르게 검색할 수 있습니다.