코딩테스트/자료구조

2. Map & HashMap

초코chip 2024. 4. 12. 15:43

사용법 요약

  • 삽입: map.put(key값, value값)
  • 조회: map.get(key값)
  • 키 조회: Set<> keys = map.keySet();
  • 삭제: map.remove(key값)
  • 전체 출력: map.toString();

개념

정의

  • Map 정의: 키(key)와 값(value)을 저장하는 데이터 구조의 인터페이스
  • HashMap 정의: Map 인터페이스의 구현체, 해시 테이블을 사용하여 키와 값을 저장
    • 즉, 해시 함수를 통해 키와 값을 저장 -> 값 접근 성능이 좋음

 

HashMap 특징

  • 키와 값은 모두 객체여야 한다.
  • 기존에 저장된 키와 동일한 키로 값이 저장되면, 기존의 값이 새로운 값으로 대치된다.
  • 저장 공간보다 값이 추가로 들어오면, 저장공간을 약 2배로 늘림
    • 따라서, 초기에 값 개수가 정해져 있다면, 용량을 지정해주자!

 

 

언제 사용?

각 객체의 빈도를 측정 할때

예시) 입력받은 문자열에서 'A', 'C', 'G', 'T'의 출현 빈도를 측정하는 코드

HashMap<Character, Integer> hm = new HashMap<Character, Integer>(){{
    put('A', 0);
    put('C', 0);
    put('G', 0);
    put('T', 0);
}};

for(int i=0; i<P; i++){
    hm.put(ctr[i], hm.get(ctr[i]) + 1);
}

 

 

사용법

생성(선언)

HashMap<String,String> map2 = new HashMap<>();//일반 생성

HashMap<String,String> map4 = new HashMap<>(10);//초기 용량(capacity)지정

HashMap<String,String> map6 = new HashMap<String,String>(){{//초기값 지정
    put("a","b");
}};

 

추가/수정

HashMap은 따로 수정하는 메서드를 지원하지 않기에 수정할 값을 새로 삽입하는 방향으로 진행

map.put(1, "사과");

 

접근

map.get(1); //key의 값 접근

map.keySet(); //저장된 key값 확인

map; //전체 접근 : {1=사과, 2=바나나, 3=포도}

//하나씩 접근 - entrySet()활용
for (Entry<Integer, String> entry : map.entrySet()) {
    Sentry.getKey(;
    entry.getValue();
}

 

삭제

map.remove(1) //key값 제거
map.clear() //모든 값 제거