목차

  1. Map의 인터페이스
    1. Hasing(해싱) 이란?
    2. Hasing(해싱) 사용법
    3. Map의 메소드
  2. HashMap 이란?
    1. HashMap 생성방법 및 메소드
    2. 예제
  3. TreeMap 이란?
    1. TreeMap 생성 방법 및 메소드
    2. 예제

 

 

1. Map 인터페이스

  • Key와 Value 쌍으로 구성된 Entry 객체를 저장하는 구조 (Key, Value 모두 객체)
    • Key는 중복 불가, Value는 중복 허용 (ex. ID 와 PASSWORD)
  • HashMap(동기화 x)은 Hashtable(동기화 o)의 신버젼

 

 

 

1) Hashing (해싱) 이란?

  • 해시 함수를 이용하여 데이터를 저장하고 읽어오는 것
  • 해시 함수(hash function)로 해시테이블(hash table)에 데이터를 저장 & 검색
    • 해시테이블 : 배열과 링크드 리스트가 조합된 형태 (변경을 쉽게 만든 2차원 배열)
  • Objects.hash() 메소드 오버라이드를 통해 hashCode() 메소드 사용 가능
  • 사용 클래스 : Hashtable, HashMap, HashSet

 

 

 

2) Hashing 사용방법

  1. key로 해시함수를 호출해서 해시코드를 얻는다
  2. 해시코드(해시함수의 반환값)에 대응하는 LinkedList를 배열에서 찾는다
  3. LinkedList에서 key와 일치하는 데이터를 찾는다

** 해시함수는 같은 keydㅔ 대해 항상 같은 해시코드를 반환해야 한다

    서로 다른 key일지라도 같은 해시코드를 반환할 수도 있다

 

 

 

 

3) Map 메소드 (HashSet, TreeSet 과 동일)

  1. 추가
    1. put(K key, V value) : key와 value를 저장
    2. void putAll(Map m) : Map m의 데이터를 전부 저장
    3. putIfAbsent(K key, V value) : 기존 데이터에 key가 없으면  key와 value를 저장
  2. 수정
    1. replace(K key, V value) : key와 일치하는 기존 데이터의 value를 변경
    2. replace(K key, V oldValue, V newValue) : key와 oldValue가 동시에 일치하는 데이터의 value를 newValue로 변경
  3. 확인 
    1. Set<Map.Entry<K,V>> entrySet() : 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 반환
    2. Set<K> keySet() : 모든 키를 Set 객체에 담아서 반환
    3. Collection<V> values() : 저장된 모든 값을 Collection에 담아서 반환
    4. boolean isEmpty() : 컬렉션이 비어 있는지 여부 확인
    5. int size() : 저장된 키의 총 수를 반환
  4. 반환
    1. V get(Object key) : 주어진 키가 있는 값을 반환
    2. boolean containsKey(Object key) : 주어진 키(Key)가 존재하는지 여부 반환
    3. boolean containsValue(Object value) : 주어진 값(Value)이 존재하는지 여부 반환
  5. 삭제 
    1. void clear( ) : 모든 데이터를 삭제
    2. remove(Object key) : key와 일치하는 기존 데이터( key와 value)를 삭제 
    3. boolean remove(Object key, Object value) : key와 value가 동시에 일치하는 데이터를 삭제

 

 

 

2. HashMap 이란?

  • Key와 Value 쌍으로 구성된 Entry 객체를 저장하는 구조 (Key, Value 모두 객체)
  • 추가 / 삭제 / 조회가 빠름
  • 순서를 유지하려면 LinkedHashMap 클래스 사용

 

 

 

1) HashMap 생성 방법 및 메소드

  1. 생성 방법
    • HashMap<String, String> m1 = new HashMap<String, String>();          // HashMap 생성
    • HashMap<String, String> m1 = new HashMap<>();                                // new에서 타입 파라미터 생략 가능
    • HashMap<String, String> m1 = new HashMap<>(m1);                         // m1의 모든 값을 가진 HashMap 생성
    • HashMap<String, String> m1 = new HashMap<>(10);                          // 초기용량(capacity)을 10으로 지정
    • HashMap<String, String> m1 = new HashMap<>(10, 0.7f);                  // 초기 capacity, load factor를 각각 10, 10.7로 지정
  2. 반환
    1. get(Object key) : key와 맵핑된 value값을 반환
    2. V getOrDefault(Object key, V defaultValue) : Object의 key와 맵핑된 value값을 반환 (없으면 defaultValue값을 반환)
    3. Set<Map.Entry<K, V>> entrySet( ) : 모든 key-value 맵핑 데이터를 가진 Set 데이터를 반환 
    4. Set<K> keySet( ) : 모든 key 값을 가진 Set 데이터를 반환
    5. Collection<V> values( ) : 모든 value 값을 가진 Collection 데이터를 반환

 

 

 

2) 예제

 

 

 

 

3. TreeMap 이란?

  • TreeSet과 같은 성질
  • Key와 Value 쌍으로 구성된 Entry 객체를 저장하는 구조 (Key, Value 모두 객체)
    • Map 인터페이스 중 유일하게 정렬 가능
  • HashMap보다 '추가 / 삭제 / 조회'가 느림
  • 객체를 저장하면 자동으로 오름차순 정렬

 

 

 

1) TreeMap 생성 방법 및 메소드

  1. 생성 방법
    • TreeMap<> 
  2. 반환 
    1. Map.Entry<K,V> firstEntry() : 제일 작은 객체를 반환
    2. Map.Entry<K,V> lastEntry() : 제일 큰 객체를 반환
    3. Map.Entry<K,V> lowerEntry(K key) : 주어진 객체보다 작은 데이터 중 최댓값 반환(주어진 객체보다 바로 아래 객체를 반환)
    4. Map.Entry<K,V> higherEntry(K key) : 주어진 객체보다 큰 데이터 중 최솟값 반환(주어진 객체보다 바로 위 객체를 반환)
    5. Map.Entry<K,V> floorEntry(K key) : 주어진 객체와 같은 값이 있으면 반환, 없다면 주어진 객체보다 작은 데이터 중 최댓값 반환 
    6. Map.Entry<K,V> ceilingEntry(K key) : 주어진 객체와 같은 값이 있으면 반환, 없다면 주어진 객체보다 큰 데이터 중 최솟값 반환
  3. 삭제 
    1. Map.Entry<K,V> pollFirstEntry() : 제일 작은 객체를 반환하고 컬렉션에서 제거
    2. Map.Entry<K,V> pollLastEntry() : 제일 큰 객체를 반환하고 컬렉션에서 제거

 

 

 

2) 예제

 

 

 

 

4. HashMap vs TreeMap

Map을 사용하는데 정렬은 필요없고 빠른 작업이 필요하면 HashMap, 정렬이 필요하면 TreeMap

 

 

+ Recent posts