자바의 자료구조 중 Map은 여러 종류로 구현되어 있다. 그 중 가장 많이 쓰이는 것이 바로 HashMap
과 TreeMap
이다.
우선 이전 자료구조 포스팅에서 Map은 key-value 쌍
으로 데이터를 저장하는 자료구조라고 이야기했다. Map에 데이터를 넣을 때는 put(), Map에서 데이터를 꺼낼 때는 get(), 삭제할 때는 remove() 메서드를 이용한다.
그리고 Map의 요소는 key만 가져오거나, value만 가져오거나 key-value 쌍으로 가져올 수 있다.
Set set = map.entrySet(); // key, value 쌍으로 가져옴
Set set = map.keySet(); // key만 가져옴
Collection<String> values = map.values(); // value만 가져옴
이때 주의할 점은 entrySet()과 keySet() 메서드는 Set을 반환하지만, values()메서드는 Collection을 반환한다는 점이다. 이렇게 받아온 요소들의 집합은 for문 혹은 iterator를 통해서 하나씩 가져와서 사용할 수 있다.
그런데, HashMap에는 데이터의 순서가 없다. key-value 쌍을 key를 기준으로 정렬해야할 필요가 있을 경우 유용하게 사용할 수 있는 것이 TreeMap 클래스이다.
숫자 < 알파벳 대문자 < 알파벳 소문자 < 한글 (오름차순)
TreeMap 클래스는 key 값을 기준으로 데이터를 정렬해주기 때문에, 이와 관련된 메서드가 여러가지 있다.
그 예시로는 firstKey(), lastKey(), higherKey(), lowerKey()가 있다. higherKey는 인자로 넣어준 key보다 한 칸 뒤에 있는 key를 리턴해준다.
한편, 멀티 쓰레드 프로그램에서 사용되는 Map 자료구조로 HashTable이 있다.
HashMap과 HashTable의 차이점
그러나 Java5부터는 HashMap에서도 Synchronization을 지원하는 ConcurrentHashMap이 있고, 속도적인 측면에서도 HashMap이 좀 더 빠르다.