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-XXXXXXXkey
- ex) 95XXXX-XXXXXXX
hashCode
9=
94XXXX-XXXXXXXhashCode