[Java 활용] 3.11 Map 인터페이스

HashSet 클래스를 이용하여 자료를 보관할 때 원하는 자료를 판별하기 위해 반복자를 사용한다면 선형 자료구조와 큰 차이를 보이지 않습니다. 위 예처럼 단순 값을 보관하고 존재하는지 판별하기 위해 contains 메서드를 사용하면 빠릅니다. 하지만 특정 클래스 형식 개체를 보관하고 주요 멤버로 개체를 검색하려면 contains 메서드를 사용하여 해결할 수 없고 반복자를 사용해야 할 것입니다. 이를 위해 Java에서는 Map 인터페이스를 제공하고 있고 이를 기반으로 구현 클래스를 이용하면 좋은 성능을 갖는 응용을 개발할 수 있습니다.

Collection 인터페이스는 특정 자료를 보관하는 컬렉션에서 제공해야 할 기능을 약속하였습니다. 대신 Map 인터페이스는 키와 값을 쌍으로 보관하는 컬렉션에서 제공해야 할 기능을 약속하고 있습니다. 이는 Key를 이용하여 자료를 보관할 위치를 결정하여 검색에서 빠른 성능을 보장할 수 있게 해 줍니다.

Collection과 Map 인터페이스를 기반으로 구현한 클래스들의 검색 속도에 관한 사항은 자료구조에 관한 레퍼런스에서 선형 자료구조와 비선형 자료구조의 검색 속도의 차이에 관해 살펴보시기 바랍니다. 참고로 선형 자료구조는 검색 비용이 O(N), 이진 탐색 트리의 검색 비용은 O(logN), 해쉬 테이블의 검색 비용은 O(1)입니다.

다음은 Map 인터페이스에 약속한 주요 기능입니다.

//보관한 모든 쌍을 제거
public void clear();
//특정 key를 보관하고 있는지 판별
public boolean containsKey(Key key);
//특정 value를 보관하고 있는지 판별
public boolean containsValue(Value value);
//Map에 보관한 key, value를 대응하는 Set 구하기
public Set<Map.Entry<Key, Value> > entrySet();
//key에 대응하는 value 구하기
public Value get(Key key);
//Map의 key의 Set 구하기
public Set<Key> keySet();
//key, value 쌍 보관
public void put(Key key, Value value);
//src에 보관한 쌍 모두를 보관
public void putAll(Map<Key, Value> src);
//특정 key에 대응하는 key, value 쌍을 제거
public void Remove(Key key);
//보관한 개수
public int size();
//보관한 value의 Collection 구하기
public Collection<Value> values();