2021.01.07 - 13:18

코드스쿼드 마스터즈 과정 첫번째 주 알고리즘 날이다. 백준 1076번 저항 문제는 Map이 생각나는 문제이다. 문제는 아무것도 Map에 대해 생각나는 것이 없다. 이전에 쓴 포스팅들을 살펴보면 분명히 써본거 같아 보이는데 전혀 기억이 안난다.

콜렉션즈 프레임워크에서 Map은 이러한 위치에 있다. Map 안에도 여러가지가 있다. 그중에서 여러 곳에서 흔히 들어 볼수 있는게 HashMap인데 아직 이유는 잘 모르겠다. 흔히 쓰니까 나도 HashMap을 이용해서 문제를 풀어봐야겠다.

그런데 해싱(Hashing)이란?

대부분의 탐색 방법들은 탐색 키를 저장된 키 값과 반복적으로 비교하면서 탐색을 원하는 항목에 접근한다. 반면 해싱은 키 값에 직접 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근한다. 이렇게 키 값의 연산에 의해 직접 접근이 가능한 구조를 해시 테이블(hash table)이라 부르고, 해시 테이블을 이용한 탐색을 해싱(hashing)이라 한다.
출처: https://mattlee.tistory.com/62 [waca's field]

HashMap의 특징은 다음과 같다:

  1. 값은 중복 저장될 수 있지만, 키는 중복 저장될 수 없다.
  2. 키와 값은 모두 객체이다.
  3. 기존에 저장된 키와 동일한 키로 저장하면 기존의 키는 사라지고 새로운 키로 대체된다.
  4. 저장공간보다 값이 추가로 들어오면 List처럼 저장공간을 추가로 늘린다.
  5. List처럼 저장공간을 한 칸씩 늘리는게 아니라 두배로 늘리기때문에 Map의 초기 용량을 지정해주는 것이 좋다.

HashMap의 사용방법:

HashMap<String, Integer> map = new HashMap<>(); // new에서 타입 파라미터 생략가능

//map.put(Key, Value); Key와 Value를 지정한 타입 파라미터 순서대로 입력한다
map.put(black, "0"); //값 추가
map.put(brown, "1");
map.put(red, "2");

map.remove(black); // Key인 black 제거
map.clear(); // 모든 값 제거

System.out.println(map); //전체 출력 {black=0, brown=1, red=2}
System.out.println(map.get(black)); //black의 Value인 0이 출력된다
//그 외에 entrySet()을 활용하거나 keySet()을 활용해서 전체 출력이 가능함
profile
TIL 남기는 공간입니다

0개의 댓글