목차
- Map의 인터페이스
- Hasing(해싱) 이란?
- Hasing(해싱) 사용법
- Map의 메소드
- HashMap 이란?
- HashMap 생성방법 및 메소드
- 예제
- TreeMap 이란?
- TreeMap 생성 방법 및 메소드
- 예제
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 사용방법
- key로 해시함수를 호출해서 해시코드를 얻는다
- 해시코드(해시함수의 반환값)에 대응하는 LinkedList를 배열에서 찾는다
- LinkedList에서 key와 일치하는 데이터를 찾는다
** 해시함수는 같은 keydㅔ 대해 항상 같은 해시코드를 반환해야 한다
서로 다른 key일지라도 같은 해시코드를 반환할 수도 있다
3) Map 메소드 (HashSet, TreeSet 과 동일)
- 추가
- V put(K key, V value) : key와 value를 저장
- void putAll(Map m) : Map m의 데이터를 전부 저장
- V putIfAbsent(K key, V value) : 기존 데이터에 key가 없으면 key와 value를 저장
- 수정
- V replace(K key, V value) : key와 일치하는 기존 데이터의 value를 변경
- V replace(K key, V oldValue, V newValue) : key와 oldValue가 동시에 일치하는 데이터의 value를 newValue로 변경
- 확인
- Set<Map.Entry<K,V>> entrySet() : 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 반환
- Set<K> keySet() : 모든 키를 Set 객체에 담아서 반환
- Collection<V> values() : 저장된 모든 값을 Collection에 담아서 반환
- boolean isEmpty() : 컬렉션이 비어 있는지 여부 확인
- int size() : 저장된 키의 총 수를 반환
- 반환
- V get(Object key) : 주어진 키가 있는 값을 반환
- boolean containsKey(Object key) : 주어진 키(Key)가 존재하는지 여부 반환
- boolean containsValue(Object value) : 주어진 값(Value)이 존재하는지 여부 반환
- 삭제
- void clear( ) : 모든 데이터를 삭제
- V remove(Object key) : key와 일치하는 기존 데이터( key와 value)를 삭제
- boolean remove(Object key, Object value) : key와 value가 동시에 일치하는 데이터를 삭제
2. HashMap 이란?
- Key와 Value 쌍으로 구성된 Entry 객체를 저장하는 구조 (Key, Value 모두 객체)
- 추가 / 삭제 / 조회가 빠름
- 순서를 유지하려면 LinkedHashMap 클래스 사용
1) HashMap 생성 방법 및 메소드
- 생성 방법
- 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로 지정
- 반환
- V get(Object key) : key와 맵핑된 value값을 반환
- V getOrDefault(Object key, V defaultValue) : Object의 key와 맵핑된 value값을 반환 (없으면 defaultValue값을 반환)
- Set<Map.Entry<K, V>> entrySet( ) : 모든 key-value 맵핑 데이터를 가진 Set 데이터를 반환
- Set<K> keySet( ) : 모든 key 값을 가진 Set 데이터를 반환
- Collection<V> values( ) : 모든 value 값을 가진 Collection 데이터를 반환
2) 예제
3. TreeMap 이란?
- TreeSet과 같은 성질
- Key와 Value 쌍으로 구성된 Entry 객체를 저장하는 구조 (Key, Value 모두 객체)
- Map 인터페이스 중 유일하게 정렬 가능
- HashMap보다 '추가 / 삭제 / 조회'가 느림
- 객체를 저장하면 자동으로 오름차순 정렬
1) TreeMap 생성 방법 및 메소드
- 생성 방법
- TreeMap<>
- 반환
- Map.Entry<K,V> firstEntry() : 제일 작은 객체를 반환
- Map.Entry<K,V> lastEntry() : 제일 큰 객체를 반환
- Map.Entry<K,V> lowerEntry(K key) : 주어진 객체보다 작은 데이터 중 최댓값 반환(주어진 객체보다 바로 아래 객체를 반환)
- Map.Entry<K,V> higherEntry(K key) : 주어진 객체보다 큰 데이터 중 최솟값 반환(주어진 객체보다 바로 위 객체를 반환)
- Map.Entry<K,V> floorEntry(K key) : 주어진 객체와 같은 값이 있으면 반환, 없다면 주어진 객체보다 작은 데이터 중 최댓값 반환
- Map.Entry<K,V> ceilingEntry(K key) : 주어진 객체와 같은 값이 있으면 반환, 없다면 주어진 객체보다 큰 데이터 중 최솟값 반환
- 삭제
- Map.Entry<K,V> pollFirstEntry() : 제일 작은 객체를 반환하고 컬렉션에서 제거
- Map.Entry<K,V> pollLastEntry() : 제일 큰 객체를 반환하고 컬렉션에서 제거
2) 예제
4. HashMap vs TreeMap
Map을 사용하는데 정렬은 필요없고 빠른 작업이 필요하면 HashMap, 정렬이 필요하면 TreeMap
'IT 언어 > Java' 카테고리의 다른 글
[Java] Stack 과 Queue (0) | 2024.02.12 |
---|---|
[Java] Iterator 인터페이스 (ListIterator, Enumeration) (0) | 2024.02.12 |
[Java] Set 인터페이스 (HashSet 과 TreeSet) (0) | 2024.02.12 |
[Java] List 인터페이스 (ArrayList 와 LinkedList) (1) | 2024.02.12 |
[Java] Collection (List, Set, Map) (0) | 2024.02.08 |