V put(K key, V value) : key에 해당하는 value를 Map에 삽입한다.
V get(K key) : key에 해당하는 value를 반환한다.
boolean isEmpty() : Map이 비어있는지 반환한다.
boolean containsKey(Object key) : Map에 해당 key가 있는지 반환한다.
boolean containsValue(Object value) Map에 해당 value가 있는지 반환한다.
Set keyset() : key집합을 Set으로 반환한다.
Collection values() : value를 Collection으로 반환한다.
V remove(key) : key가 있는 경우 삭제한다.
boolean remove(Object kay, Object value) : key가 있는 경우 key에 해당하는 value가 인자와 일치할때 삭제한다.
HashMap 클래스
가장 많이 사용하는 Map인터페이스 구현체다.
해시 방식의 자료를 저장하는 공간을 해시 테이블이라고 한다.
key값이 정해지면 그에 대응하는 해시 테이블의 저장위치가 저장되는데 이런 위치 계산 함수가 해시 함수다.
key를 알고 있는 상태에서 value를 검색하는데 상당히 빠르다.
다른 key에 같은 index가 반환되는 collision이 발생할 수 있다. 그래서 적정수준으로 데이터가 차면 확장해 collision확률을 낮춘다.
Map인터페이스에서 사용하는 key값은 중복될 수 없다. 그래서 equals()와 hashCode()를 재정의한다.
다음은 회원관리 프로그램을 HashMap으로 정의한 것이다
public class MemberHashMap {
private HashMap<Integer, Member> hashMap;
public MemberHashMap() {
hashMap = new HashMap<Integer, Member>();
}
public void addMember(Member member) {
hashMap.put(member.getMemberId(), member);
}
public boolean removeMember(int memberId) {
if (hashMap.containsKey(memberId)) {
hashMap.remove(memberId);
return true;
}
System.out.println(memberId + "is not found");
return false;
}
public void showAllMember() {
Iterator<Integer> iterator = hashMap.keySet().iterator();
while (iterator.hasNext()) {
int key = iterator.next();
Member member = hashMap.get(key);
System.out.println(member);
}
System.out.println(" ");
}
}
showAllMember()를 보면 Iterator로 순회하는것을 알 수 있다. Map 인터페이스는 모든 자료를 한번에 순회할 수 있는 기능이 없다. 그래서 Iterator로 순회하는 것이다.
key를 먼저 가져와서 그 key로 순회하면서 value를 가지고 온다.
다음은 테스트코드다
public class MemberHashMapTest {
public static void main(String[] args) {
MemberHashMap memberHashMap = new MemberHashMap();
Member member1 = new Member(1001, "아이유");
Member member2 = new Member(1002, "이지은");
Member member3 = new Member(1003, "이지금");
Member member4 = new Member(1004, "이지동");
memberHashMap.addMember(member1);
memberHashMap.addMember(member2);
memberHashMap.addMember(member3);
memberHashMap.addMember(member4);
memberHashMap.showAllMember();
memberHashMap.removeMember(1004);
memberHashMap.showAllMember();
}
}
Hashtable
HashMap과 마찬가지로 k-v 구조다. Vector와 마찬가지로 멀티스레드를 위한 동기성을 제공한다.
TreeMap
Key값으로 자료를 정령하려면 TreeMap을 사용할 수 있다. TreeSet과 마찬가지로 이진 검색 트리로 구현되어있다.