alt
Home 자바의정석 - 11장 컬렉션 프레임워크 4. Map
Post
Cancel

자바의정석 - 11장 컬렉션 프레임워크 4. Map


HashMap

  • Hashtable의 새로운버전. 따라서 HashMap이 권장된다.

  • Map을 구현하기 때문에 Map의 특성을 갖는다. (저장순서 유지 X).

  • Hashing 하기때문에 검색에 있어 뛰어난 성능을 보인다.

  • HashMap 내부에 Entry(Key, Value로 이루어진 internal class)를 구현하고, 이 Entry를 HashMap의 배열로 갖는다.

  • map.entrySet()로 K-V 쌍을 가져오거나, map.keySet(), map,values()를 통해 K-V를 각각 읽어 올 수 있다.

  • 한 key에 대응하는 value는 하나이다.

    • 한 key에 복수에 데이터를 저장하는법: HashMap의 value로 HashMap을 다시 저장하면 된다. 꺼낼때도 반대로 꺼내오면 된다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    // 그룹에 전화번호 추가
    static void addPhoneNo(String groupName, String name, String tel) {
      addGroup(groupName);
      HashMap group = (HashMap)phoneBook.get(groupName);
      group.put(tel, name);
    }
      
    // 그룹을 추가하기(초기에)
    static void addGroup(String name, String tel) {
      if(!phoneBook.containsKey(groupName)) {
        phoneBook.put(groupName, new HashMap());
      }
    }
    


해싱

  • 배열과 링크드리스트의 조합. 배열 하나에 하나의 bucket. 하나의 bucket은 링크드리스트
  • 실제로 HashMap에서는 Object 클래스에 정의된 hashCode() 를 해시함수로 사용한다.
    • String의 경우 Object로부터 상속받은 hashCode() 를 사용하기때문에 같은 글자에 대해서는 같은 해시코드를 얻는다. 따라서, equals() 를 통해 같은 객체인지도 비교해 같은 객체인 것을 판별한다. -> hash 제약조건이 있는 이유


TreeMap

: Map에서 순차적으로 값을 저장하기 위해 쓰인다. 범위검색이나 정렬이 필요한 경우 사용한다.

  • 일반적인 검색의 경우 HashMap이 TreeMap보다 뛰어나기 때문에 보통은 HashMap을 사용한다.



Reference)

자바의 정석 3판

This post is licensed under CC BY 4.0 by the author.