Hash

자몽·2021년 7월 26일
1

알고리즘

목록 보기
4/31

✅ Hash Table

Hash Table은 어떠한 값을 받으면 그 값을 해시 함수에 통과시켜 나온 인덱스에 저장하는 자료구조이다.
쉽게 요약하자면,

Hash Table
키 : 값 으로 이루어진 자료구조

라고 설명할 수 있다.

이러한 특징으로 인해, JavaScript에서는 Hash Table을 사용해서 문제를 풀 때, 주로 Map, Object를 사용한다.

알고리즘 문제에서는 대부분 해시 문제가 나왔을 때, 배열 형태로 파라미터를 받아 문제를 풀어야 한다.

const fruitsName = ['Apple', 'Orange', 'Grapefruit'];
const fruitsPrice = [2000, 4000, 3000];

과일의 이름이 담긴 배열과 과일의 가격이 담긴 배열이 있다고 하자.

📕 Map

Map객체는 간단한 키와 값을 서로 연결(매핑)시켜 저장하며 저장된 순서대로 각 요소들을 반복적으로 접근할 수 있도록 한다.

Map 객체에 키:값을 추가하려면 fruits.set(키, 값);을 사용하고,
키를 통해 값을 찾고 싶으면, fruits.get(키)를 사용한다.

위에서의 과일 이름을 로 하고, 과일 가격을 이라고 한다면,

// Map 객체 생성
const fruits = new Map();
// forEach 메서드를 통해 Map에 `키 : 값`을 추가
fruitsName.forEach((name,i)=>fruits.set(name,fruitsPrice[i]))
console.log(fruits)

콘솔 창 출력 결과는 다음과 같다.
Map(3) {"Apple" => 2000, "Orange" => 4000, "Grapefruit" => 3000}
(Set을 통해서도 Map처럼 키:값을 저장할 수 있지만, set은 중복된 값을 허용하지 않는다는 특징이 존재한다.)

📘 Object

객체는 중괄호 내부에 key: value모양으로 값을 가질 수 있다.

  • Map과의 차이점이라면,
    Object는 String과 Symbol type만 키로 가능한 반면에,
    Map은 모든 값을 키로써 가질 수 있다는 점이다.

앞서서의 Map과 마찬가지로 Object로도 동일한 작업을 해보겠다.

const fruits = {};
fruitsName.forEach((name,i)=>fruits[name]=fruitsPrice[i])
console.log(fruits)

콘솔 창 출력 결과는 다음과 같다.
{Apple: 2000, Orange: 4000, Grapefruit: 3000}

📌 Map과 Object 상황에 따라 알맞게 사용하기

Object와 Map 비교

  • ObjectStrings이며, Map의 키는 모든 값을 가질 수 있다.
  • Object크기수동으로 추적해야하지만, Map은 크기를 쉽게 얻을 수 있다.
    Map은 삽입된 순서대로 반복된다.

그래서 둘 중 어떤 것을 선택해야 하나요?

  1. 실행 시까지 키를 알수 없고, 모든 키가 동일한 type이며 모든 값들이 동일한 type일 경우에는 objects를 대신해서 map을 사용해라.

  2. 각 개별 요소에 대해 적용해야 하는 로직이 있을 경우에는 objects를 사용해라.


포스트 작성할 때 참고한 사이트:

profile
꾸준하게 공부하기

0개의 댓글