Skip to content

Java java.util.Map #

Find similar titles
  • 최초 작성자
    mjkim

Structured data

Category
Programming

Map 인터페이스 #

Map 인터페이스는 컬렉션 프레임워크의 주요 인터페이스 중 하나로, Collection 인터페이스의 상속을 받지만, List 인터페이스와 Set 인터페이스와는 다른 저장 방식을 가진다. Map 컬렉션 클래스들은 키(key)와 값(value)을 하나의 쌍으로 저장하는 방식을 사용한다. 키는 값을 찾기 위한 이름의 역할을 하고 중복을 허용하지 않지만, 값의 중복은 허용한다. 단, List와는 다르게 요소에 대한 저장 순서를 유지하지 않는다.

Map 인터페이스 하위 클래스 #

HashMap #

  • Map 컬렉션 클래스에서 가장 많이 사용되는 클래스
  • 해시 알고리즘(hash algorithm)을 사용하여 데이터를 검색 속도가 매우 빠름
  • HashMap 클래스는 Map 인터페이스를 구현하므로 중복된 키로 값 저장 불가
  • value에 null값도 사용 가능

예시 #

HashMap<String, String> map = new HashMap<>();
map.put("사과", "apple");
map.put("바나나", "banana");
map.put("복숭아", "peach");

System.out.println(map.get("바나나")); 
// "banana"

System.out.println(map.containsKey("복숭아"));  
// true
System.out.println(map.containsKey("포도"));  
// false

LinkedHashMap #

  • LinkedHashMap은 HashMap을 상속하여 만들어진 클래스로, HashMap의 특징을 가짐
  • HashMap과 다른 점은 Node 객체를 Entry 객체로 감싸서 저장된 키의 순서를 보존함

예시 #

LinkedHashMap<String, Integer> linkedMap = new LinkedHashMap<>();

linkedMap.put("A", 2);
linkedMap.put("B", 3);
linkedMap.put("D", 2);
linkedMap.put("K", 4);

for (String key : linkedMap.keySet()) {
    System.out.println(key);
}
// "A", "B", "D", "K"

for (Integer value : linkedMap.values()) {
    System.out.println(value);
}
// 2, 3, 2, 4

TreeMap #

  • TreeMap은 key-value 방식의 데이터를 이진 검색 트리(binary search tree)의 형태로 저장
  • 이진검색트리는 데이터 추가 및 제거 등의 기본 동작 시간이 매우 빠름
  • JDK 1.2부터 제공된 TreeMap 클래스는 NavigableMap 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현
  • Map 인터페이스를 구현하므로 중복된 키로는 값을 저장할 수 없음

예시 #

TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>();
treeMap.put(30, "삼십");
treeMap.put(10, "십");
treeMap.put(40, "사십");
treeMap.put(20, "이십");

for (Integer key : treeMap.keySet()) {
    System.out.println(key + " : " + treeMap.get(key)));
}
// "10 : 십", "20 : 이십", "30 : 삼십", "40 : 사십"

treeMap.remove(40);
treeMap.replace(20, "twenty");

for (Integer key : treeMap.keySet()) {
   System.out.println(String.format(key + " : "+ treeMap.get(key)));
}
// "10 : 십", "20 : twenty", "30 : 삼십"

System.out.println("treeMap size : " + treeMap.size());
// "treeMap size : 3"

Hashtable #

  • Hashtable은 JDK 1.0부터 사용해 온 HashMap 클래스와 같이 Map 인터페이스를 상속받음
  • 현재는 기존 코드와의 호환성을 위해서만 남아있으므로, Hashtable 클래스보다는 HashMap 클래스 사용을 권장함
0.0.1_20240214_1_v81