Map 인터페이스는 아래와 같이 여러 구현체를 가지고 있다.
HashMap<K, V>
LinkedHashMap<K, V>
TreeMap<K, V>
Hashtable<K, V>
HashMap<K, V>
클래스HashMap 클래스는 Map 클래스에서 가장 많이 사용되는 클래스 중 하나이다.
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// HashMap 생성
Map<String, Integer> map = new HashMap<>();
// 값 추가
map.put("Apple", 10);
map.put("Banana", 20);
map.put("Cherry", 30);
// 값 출력
System.out.println(map); // 출력: {Apple=10, Banana=20, Cherry=30}
// 특정 키의 값 가져오기
int value = map.get("Banana");
System.out.println(value); // 출력: 20
// 키 존재 여부 확인
boolean exists = map.containsKey("Apple");
System.out.println(exists); // 출력: true
// 키-값 쌍 제거
map.remove("Apple");
System.out.println(map); // 출력: {Banana=20, Cherry=30}
}
}
LinkedHashMap<K, V>
클래스LinkedHashMap
은 HashMap
을 상속받은 클래스로, Map 인터페이스를 구현한다. LinkedHashMap
은 HashMap
의 모든 기능을 가지면서 추가적으로 키-값 쌍의 삽입 순서를 유지한다. 이는 해시 테이블과 연결 리스트를 결합하여 구현된다.
import java.util.LinkedHashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// LinkedHashMap 생성
Map<String, Integer> map = new LinkedHashMap<>();
// 값 추가
map.put("Apple", 10);
map.put("Banana", 20);
map.put("Cherry", 30);
// 값 출력
System.out.println(map); // 출력: {Apple=10, Banana=20, Cherry=30}
// 특정 키의 값 가져오기
int value = map.get("Banana");
System.out.println(value); // 출력: 20
// 키 존재 여부 확인
boolean exists = map.containsKey("Apple");
System.out.println(exists); // 출력: true
// 키-값 쌍 제거
map.remove("Apple");
System.out.println(map); // 출력: {Banana=20, Cherry=30}
}
}
TreeMap<K, V>
클래스TreeMap
은 SortedMap
인터페이스를 구현한다.
TreeMap
클래스는 레드-블랙 트리(Red-Black tree)라는 자가 균형 이진 검색 트리를 기반으로 키-값 쌍을 저장한다. 이로 인해 TreeMap
은 키에 대한 효율적인 정렬 순서를 유지하며, 키 또는 키-값 쌍에 대해 정렬된 순서에 따른 다양한 연산을 제공한다.
import java.util.Map;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
// TreeMap 생성
Map<String, Integer> map = new TreeMap<>();
// 값 추가
map.put("Apple", 10);
map.put("Banana", 20);
map.put("Cherry", 30);
// 값 출력
System.out.println(map); // 출력: {Apple=10, Banana=20, Cherry=30}
// 특정 키의 값 가져오기
int value = map.get("Banana");
System.out.println(value); // 출력: 20
// 키 존재 여부 확인
boolean exists = map.containsKey("Apple");
System.out.println(exists); // 출력: true
// 키-값 쌍 제거
map.remove("Apple");
System.out.println(map); // 출력: {Banana=20, Cherry=30}
}
}
Hashtable<K, V>
클래스Hashtable
클래스는 HashMap
클래스와 같은 동작을 하는 클래스이다.
현재의 Hashtable
클래스는 HashMap
클래스와 마찬가지로 Map 인터페이스를 상속받는다. 따라서 Hashtable
클래스에서 사용할 수 있는 메소드는 HashMap
클래스에서 사용할 수 있는 메소드와 거의 같다.
하지만 현재에는 기존 코드와의 호환성을 위해서만 남아있으므로, Hashtable
클래스보다는 HashMap
클래스를 사용하는 것이 좋다.