[JAVA] 12-5.컬렉션 프레임워크_Map 인터페이스
Map 인터페이스는 자료를 쌍으로 관리하는데 필요한 메서드가 정의되어있다.
key-value 쌍으로 이루어진 객체의 key값은 유일하고 value 값은 중복될 수 있다.
Map인터페이스를 구현한 클래스는 내부적으로 해시 알고리즘에 의해 구현되어 있다.
1. HashMap 클래스
HashMap은 Map 인터페이스를 구현한 클래스 중 가장 많이 사용한다.
HashMap에서 자료를 관리하는 방식은 해시 방식이다. 서로 다른 key 값에 같은 해시값이 반환되는 충돌이 발생할 경우를 고려해 해시 테이블에 데이터를 꽉 채우지 않고 적정 수준이 되면 테이블을 확장해 충돌 발생 확률을 낮춘다.
Map 인터페이스에서 사용하는 key 값은 중복될 수 없으므로 equals()와 hashcode() 메서드를 재정의하여 사용하는 것이 좋다.
1. HashMap을 활용해 회원 관리 프로그램 구현하기
- addMember(): HashMap에 회원 추가(key-value 쌍으로)
- removeMember(): HashMap에서 매개변수로 받은 key값에 해당하는 회원이 있으면 회원 삭제
- showAllMember(): Iterator를 사용한 HashMap 전체 회원 출력
<HashMap 주요 메서드>
boolean containsKey(Object key) | 해당 key 값이 HashMap에 존재하는지 여부 |
boolean containsValue(Object value) | 해당 value 값이 HashMap에 존재하는지 여부 |
V put(K key, V value> | key-value 쌍을 HashMap에 추가 |
V get(Object key) | key값에 해당하는 value 반환 |
V remove(Object key) | key값에 해당하는 value 삭제 |
Set<K> keySet() | 모든 key값을 Set 객체로 반환 |
Collection<V> values() | 모든 value 를 Collection 자료형으로 반환 |
2. HashMap과 Hashtable
HashMap과 Hashtable 모두 쌍으로 이루어진 자료를 관리하는데 사용한다.
멀티스레드 환경이 아니라면, Hashtable 보다 HashMap을 사용하는 것을 권장한다.
HashMap | 동기화 제공X |
Hashtable | 동기화 제공O |
2. TreeMap 클래스
TreeMap은 Map 인터페이스를 구현한 클래스 중 key 값으로 자료를 정렬하기 위해 사용한다.
TreeMap은 이진 탐색 트리로 구현되었고 정렬 기준 값인 key 값에 해당하는 클래스에 Comparable 혹은 Comparator 인터페이스를 구현해야한다.
여기서는 key 값인 회원 id가 Integer 형이기 때문에 따로 Comparable 인터페이스를 구현할 필요가 없다.(이미 구현되어있으므로)
<TreeMap 주요 메서드>
Object put(Object key, Object value) | TreeMap에 key-value 쌍으로 추가 |
Object get(Object key) | key 값에 해당하는 value 반환 |
boolean containsKey(Object key) | 해당 key 값이 TreeMap에 존재하는지 여부 |
boolean containsValue(Object value) | 해당 value 값이 HashMap에 존재하는지 여부 |
V remove(Object key) | key값에 해당하는 value 삭제 |
Set<K> keySet() | 모든 key값을 Set 객체로 반환 |
Collection<V> values() | 모든 value 를 Collection 자료형으로 반환 |