/ JAVAJUNGSUK

Ch11-46~47. HashMap

자바의 정석 기초편

0. 목차



Chapter11. 컬렉션 프레임웍

Ch11 - 46. HashMap과 Hashtable

Ch11 - 47. HashMap의 키(key)와 값(value)



Ch11 - 46. HashMap과 Hashtable


▶ HashMap과 Hashtable이란?

▷ (저장)순서 허용X, key 중복 허용X, value 중복 허용
▷ Map 인터페이스 구현


▷ Hashtableold HashMapnew
▷ key - value 한 쌍으로 저장
▷ id(key) - 중복X, password(value) - 중복O
▷ 순서를 유지하려면, linkedHashMap 클래스 사용


▶ TreeMap이란?

▷ TreeMap ≒ TreeSets
▷ 범위 검색과 정렬에 유리한 컬렉션 클래스
▷ HashMap 보다 데이터 추가/삭제 시간 더 걸림 : 비교 후 저장하기 때문



Ch11 - 47. HashMap의 키(key)와 값(value)


▶ HashMap의 저장 기법

▷ hashing 기법으로 데이터를 저장
  • hash 붙은 건 거의 hashing 기법으로 저장
▷ 데이터가 많아도 검색이 빠름
▷ Map 인터페이스 구현
▷ 데이터를 key-value 쌍으로 저장
  • key : 컬랙션 내의 key 중에서 유일해야 함
  • value : key와 달리 데이터의 중복 허용
      HashMap map = new HashMap();
      map.put("aaaa", "1111");
      map.put("bbbb", "2222");
      map.put("bbbb", "3333"); // add() 아니고 put()
    
      [aaaa]-[1111]
      [bbbb]-[2222] -덮어쓰기→ [3333]
    
  • HashMap Code
      public class HashMap extends AbstractMap
                      implements Map, Cloneable, Serializable {
          transient Entry[] table; // key-value를 배열로 저장
          ...
          static class Entry implements Map.Entry {
              final Object key;
              Object value;
              ...
          }
      }
    
      // 객체지향적 코드
      Entry[] table;
        
      class Entry {
          Object key;
          Object value;
      }
        
      // 비객체지향적 코드
      Object[] key;
      Object[] value;
    


▶ hashing이란?

▷ 함수를 이용하여 데이터를 저장하고 읽어오는 것


▷ 해시 함수(hash function)로 해시 테이블(hash table)에 데이터를 저장/검색
Objects.hash()


▶ 해시 테이블(hash table)이란?

▷ 배열과 LinkedList가 조합 된 상태
▷ table = 2차원 배열


▶ 해시 테이블에 저장 된 데이터를 가져오는 과정

▷ key로 해시 함수를 호출 → 해시 코드(hash Code) 반환
  • 해시 함수는 같은 키에 대해 항상 같은 해시 코드를 반환해야 함
▷ 해시 코드(해시 함수의 반환값)에 대응하는 LinkedList를 배열에서 찾음
▷ 서로 다른 키라도 같은 값의 해시코드 반환 가능
  • ex) 95XXXX-XXXXXXX key 94XXXX-XXXXXXX key
  • ex) 95XXXX-XXXXXXX hashCode 9 = 94XXXX-XXXXXXX hashCode