JAVA의 Map

 

 

JAVA의 Map

자바에서 Map은 키와 값의 쌍을 저장하는 컬렉션입니다. 각 키는 고유한 값을 가지며, 해당 값을 검색하기 위해 키를 사용할 수 있습니다. Map은 자바 컬렉션 프레임워크의 일부이며, 사전, 연관 배열 등 다양한 사용 사례에 대한 구현을 제공합니다. Map은 특정 식별자로 데이터를 저장하고 효율적으로 검색해야하는 작업에 필수적입니다.

 

 

Map 유형

자바에서는 여러 Map 인터페이스 구현이 있으며, 각각 고유한 특성을 가지고 있습니다. 일반적으로 사용되는 몇 가지는 다음과 같습니다.

 

HashMap

  • 버킷 배열을 사용하여 해시 테이블을 구현합니다.
  • 삽입, 검색 및 삭제 작업의 평균 시간 복잡도가 빠른 O(1)을 제공합니다.
  • 요소의 특정 순서를 보장하지 않습니다.

 

Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("apple", 3);
hashMap.put("banana", 2);
hashMap.put("cherry", 5);
System.out.println(hashMap.get("banana")); // Output: 2

 

LinkedHashMap

  • HashMap을 확장하고 삽입 순서를 유지합니다.
  • 삽입, 검색 및 삭제 작업의 평균 시간 복잡도가 빠른 O(1)을 제공합니다.
  • 삽입 순서를 보존해야 할 때 적합합니다.
Map<String, Integer> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("apple", 3);
linkedHashMap.put("banana", 2);
linkedHashMap.put("cherry", 5);
System.out.println(linkedHashMap.keySet()); // Output: [apple, banana, cherry]

 

TreeMap

  • Red-Black 트리를 사용하여 요소를 저장합니다.
  • 자연 순서나 제공된 비교자를 기반으로 정렬된 순서로 요소를 유지합니다.
  • 삽입, 검색 및 삭제 작업의 시간 복잡도는 O(log n)을 제공합니다.
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("apple", 3);
treeMap.put("banana", 2);
treeMap.put("cherry", 5);
System.out.println(treeMap.entrySet()); // Output: [apple=3, banana=2, cherry=5]

 

HashTable

  • HashMap과 유사하지만 동기화됩니다(스레드 안전).
  • 메서드에 대한 동기화된 액세스를 제공하여 스레드 안전성을 보장합니다.
  • 일반적으로 전역 동기화로 인해 ConcurrentHashMap에 비해 효율이 떨어집니다.
Map<String, Integer> hashTable = new Hashtable<>();
hashTable.put("apple", 3);
hashTable.put("banana", 2);
hashTable.put("cherry", 5);
System.out.println(hashTable.containsValue(2)); // Output: true

 

ConcurrentHashMap

  • 고도의 동시성 및 스레드 안전성을 제공합니다.
  • 데이터를 세그먼트로 분할하여 여러 스레드가 다른 세그먼트에서 동시에 작업할 수 있도록 합니다.
  • ConcurrentHashMap에 비해 동시 시나리오에 대해 더 나은 성능을 제공합니다.
Map<String, Integer> concurrentHashMap = new ConcurrentHashMap<>();
concurrentHashMap.put("apple", 3);
concurrentHashMap.put("banana", 2);
concurrentHashMap.put("cherry", 5);
System.out.println(concurrentHashMap.containsKey("orange")); // Output: false

 

일반적인 Map 작업

요소 추가

  • put(key, value) 메서드를 사용하여 키와 값의 쌍을 맵에 추가합니다.

요소 검색

  • get(key) 메서드를 사용하여 특정 키와 연결된 값을 검색합니다.

요소의 존재 유무 확인

  • containsKey(key) 메서드를 사용하여 키가 맵에 있는지 확인합니다.
  • containsValue(value) 메서드를 사용하여 값이 맵에 있는지 확인합니다.

요소 업데이트

  • 기존 키로 값을 넣으면 값이 업데이트됩니다.

요소 제거

  • remove(key) 메서드를 사용하여 키-값 쌍을 맵에서 제거합니다.

맵 반복

  • for-each 루프나 반복자를 사용하여 맵의 엔트리(키-값 쌍)를 반복합니다.

키와 값 가져오기

  • keySet()은 모든 키의 집합을 가져옵니다.
  • values()는 모든 값을 가져오는 컬렉션을 가져옵니다.
  • entrySet()은 모든 키-값 쌍의 집합을 가져옵니다.

 

 

 

자바에서 맵은 키-값 쌍을 효율적으로 저장하고 관리할 수 있는 다용도 데이터 구조입니다. HashMap, LinkedHashMap, TreeMap, HashTable 및 ConcurrentHashMap과 같은 다양한 구현 중에서 선택할 수 있습니다. 이러한 구현은 성능, 순서 보존 여부 및 스레드 안전성 측면에서 다양한 트레이드오프를 제공합니다. 각 구현의 특성을 이해하면 자바 응용 프로그램에서 맵을 사용할 때 정보를 기반으로 더 나은 결정을 내릴 수 있습니다.