프로그래밍/Java

Java Collection(HashMap, TreeMap, LinkedHashMap)

C.Story 2023. 2. 6. 15:33
반응형

Map 인터페이스는 Java Collection Framework의 일부이며 각 키가 고유하고 해당 값을 검색하는 데 사용할 수 있는 키-값 쌍을 저장하는 데이터 구조입니다. Map 인터페이스의 사용방법 중 일부는 다음과 같습니다.


  • put(key, value): 맵에 새 키-값 쌍을 추가하거나 기존 키와 연결된 값을 업데이트합니다.
  • get(key): 주어진 키와 관련된 값을 검색합니다.
  • remove(key): 맵에서 지정된 키를 가진 키-값 쌍을 제거합니다.
  • containsKey(key): 맵에 지정된 키가 있는 키-값 쌍이 포함되어 있으면 true를 반환합니다.
  • isEmpty(): 맵이 비어 있으면 true를 반환합니다. 즉, 키-값 쌍이 포함되어 있지 않습니다.
  • size(): 맵에서 키-값 쌍의 수를 반환합니다.
  • keySet(): 맵에 있는 모든 키의 집합을 반환합니다.
  • values(): 지도에 있는 모든 값의 컬렉션을 반환합니다.
  • entrySet(): 맵에 있는 모든 키-값 쌍의 집합을 반환합니다. 여기서 각 키-값 쌍은 Map.Entry 개체로 표시됩니다.
  • clear(): 맵에서 모든 키-값 쌍을 제거합니다.

Map 인터페이스는 HashMap, TreeMap, LinkedHashMap 등 각각 고유한 장단점이 있는 몇 가지 구체적인 클래스로 구현됩니다.


HashMap

Java의 HashMap 클래스는 Map 인터페이스의 구체적인 구현이며 키-값 쌍을 저장하기 위한 해시 테이블 데이터 구조를 제공합니다. HashMap의 주요 기능 중 일부는 다음과 같습니다.

  • 해시 테이블을 사용하여 키-값 쌍을 저장하므로 요소의 빠른 조회, 삽입 및 삭제를 위한 효율적인 데이터 구조가 됩니다.
  • 요소의 순서를 유지하지 않으므로 요소가 삽입되거나 검색되는 순서가 동일하지 않을 수 있습니다.
  • null 값과 null 키를 허용하므로 유연한 데이터 구조가 됩니다.
  • 스레드로부터 안전하지 않습니다. 즉, 적절한 동기화 없이는 여러 스레드가 동시에 맵에 액세스 할 수 없습니다.
  • get 및 put의 기본 작업에 대해 일정한 시간 O(1) 평균 시간 복잡도를 제공합니다.
import java.util.HashMap;
import java.util.Map;

public class HashMapExample {
  public static void main(String[] args) {
    Map<String, Integer> map = new HashMap<>();
    
    // Adding key-value pairs to the map
    map.put("John", 30);
    map.put("Jane", 25);
    map.put("Jim", 35);
    
    // Retrieving values from the map
    System.out.println("Jane's age: " + map.get("Jane"));
    
    // Iterating over the elements in the map
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
      System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  }
}

이 예제에서는 문자열 키와 정수 값의 HashMap 맵을 만듭니다. 세 개의 키-값 쌍을 맵에 추가하고 "Jane" 키와 연결된 값을 검색합니다. 마지막으로 entrySet() 메서드를 사용하여 맵의 요소를 반복하고 키와 값을 출력합니다.

HashMap은 요소의 순서를 유지하지 않기 때문에 요소가 인쇄되는 순서는 삽입된 순서와 다를 수 있습니다.


TreeMap

TreeMap 클래스는 Map 인터페이스의 구체적인 구현이며 키-값 쌍을 저장하기 위한 정렬된 맵 데이터 구조를 제공합니다. TreeMap의 요소는 키를 기준으로 오름차순으로 저장되므로 요소의 순서가 중요한 상황에 유용합니다. TreeMap의 주요 기능 중 일부는 다음과 같습니다.

TreeMap은 Red-Black Tree 데이터 구조를 사용하여 키-값 쌍을 저장하므로 요소 검색, 삽입 및 삭제를 위한 효율적인 데이터 구조가 됩니다.

  • 기본적으로 오름차순으로 저장되는 키를 기반으로 요소의 순서를 유지합니다.
  • null 값을 허용하지 않지만 단일 null 키는 허용합니다.
  • 스레드로부터 안전하지 않습니다. 즉, 적절한 동기화 없이는 여러 스레드가 동시에 맵에 액세스할 수 없습니다.
  • get 및 put의 기본 작업에 대수 시간 복잡도 O(log n)을 제공합니다.
import java.util.Map;
import java.util.TreeMap;

public class TreeMapExample {
  public static void main(String[] args) {
    Map<String, Integer> map = new TreeMap<>();
    
    // Adding key-value pairs to the map
    map.put("John", 30);
    map.put("Jane", 25);
    map.put("Jim", 35);
    
    // Retrieving values from the map
    System.out.println("Jane's age: " + map.get("Jane"));
    
    // Iterating over the elements in the map
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
      System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  }
}

// Output:
// Jane's age: 25
// Jim: 35
// John: 30

이 예제에서는 문자열 키와 정수 값의 TreeMap 맵을 만듭니다. 세 개의 키-값 쌍을 맵에 추가하고 "Jane" 키와 연결된 값을 검색합니다. 마지막으로 entrySet() 메서드를 사용하여 맵의 요소를 반복하고 키와 값을 출력합니다.


LinkedHashMap

LinkedHashMap 클래스는 Map 인터페이스의 구체적인 구현이며 키-값 쌍을 저장하기 위해 연결된 목록 구현과 함께 해시 테이블 데이터 구조를 제공합니다. LinkedHashMap은 HashMap을 확장하고 요소의 순서를 유지하므로 요소가 삽입되거나 검색되는 순서가 동일합니다. LinkedHashMap의 주요 기능 중 일부는 다음과 같습니다.

LinkedHashMap은 연결 목록 구현이 있는 해시 테이블을 사용하여 키-값 쌍을 저장하므로 요소의 빠른 조회, 삽입 및 삭제를 위한 효율적인 데이터 구조가 됩니다.

  • 요소의 순서를 유지하므로 요소가 삽입되거나 검색되는 순서는 동일합니다.
  • null 값과 null 키를 허용하므로 유연한 데이터 구조가 됩니다.
  • 스레드로부터 안전하지 않습니다. 즉, 적절한 동기화 없이 여러 스레드가 동시에 맵에 액세스할 수 없습니다.
  • get 및 put의 기본 작업에 대해 일정한 시간 O(1) 평균 시간 복잡도를 제공합니다.
import java.util.LinkedHashMap;
import java.util.Map;

public class LinkedHashMapExample {
  public static void main(String[] args) {
    Map<String, Integer> map = new LinkedHashMap<>();
    
    // Adding key-value pairs to the map
    map.put("John", 30);
    map.put("Jane", 25);
    map.put("Jim", 35);
    
    // Retrieving values from the map
    System.out.println("Jane's age: " + map.get("Jane"));
    
    // Iterating over the elements in the map
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
      System.out.println(entry.getKey() + ": " + entry.getValue());
    }
  }
}

// Output:
// Jane's age: 25
// John: 30
// Jim: 35

이 예제에서는 문자열 키와 정수 값의 LinkedHashMap 맵을 만듭니다. 세 개의 키-값 쌍을 맵에 추가하고 "Jane" 키와 연결된 값을 검색합니다. 마지막으로 entrySet() 메서드를 사용하여 맵의 요소를 반복하고 키와 값을 출력합니다.


다음은 Java Collection의 Set 인터페이스에 대해 알아보겠습니다.

https://chunstory.tistory.com/11

 

Java Collection(HashSet, TreeSet, LinkedHashSet)

Java의 Set은 고유한 요소의 모음이며 중복을 허용하지 않습니다. Set은 HashSet, TreeSet 및 LinkedHashSet을 포함하여 Java의 여러 클래스에 의해 구현됩니다. Set 인터페이스의 일부 메서드는 다음과 같습

chunstory.tistory.com

 


 

https://chunstory.tistory.com/9

 

Java Collection(ArrayList, LinkedList, Vector)

Java에서 java.util.List 인터페이스는 Java Collection Framework의 일부이며 정렬된 요소 모음을 나타냅니다. 목록은 중복을 허용하고 조작할 수 있는 정의된 순서를 가집니다. 요소는 인덱스로 액세스할

chunstory.tistory.com

 

 

 

 

반응형