Collection Framework (Map)

이규현·2024년 8월 28일

Map 개념

Map 은 Key-Value 쌍을 저장하는 자료구조

  • Key는 Map내에서 유일해야 한다.
  • Key는 중복될 수 없지만 Value는 중복될 수 있다.
  • Map은 순서를 유지하지 않는다.

자바는 HashMap, TreeMap, LinkedHashMap 의 다양한 구현체를 제공한다.
지바의 Set은 중복을 허용하지 않는데 이 KeySet() (Map의 키 목록을 조회하는 메소드)를 호출하면 Set자료구조를 반환한다.
즉, Map의 키가 Set의 구조이다.

  1. HashMap:
    구조: HashMap 은 해시를 사용해서 요소를 저장한다. 키( Key ) 값은 해시 함수를 통해 해시 코드로 변환되고, 이
    해시 코드는 데이터를 저장하고 검색하는 데 사용된다.
    특징: 삽입, 삭제, 검색 작업은 해시 자료 구조를 사용하므로 일반적으로 상수 시간( O(1) )의 복잡도를 가진다.
    순서: 순서를 보장하지 않는다.
  2. LinkedHashMap:
    구조: LinkedHashMap 은 HashMap 과 유사하지만, 연결 리스트를 사용하여 삽입 순서 또는 최근 접근 순서에
    따라 요소를 유지한다.
    특징: 입력 순서에 따라 순회가 가능하다. HashMap 과 같지만 입력 순서를 링크로 유지해야 하므로 조금 더 무겁
    다.
    성능: HashMap 과 유사하게 대부분의 작업은 O(1) 의 시간 복잡도를 가진다.
    순서: 입력 순서를 보장한다.
    3. TreeMap:
    구조: TreeMap 은 레드-블랙 트리를 기반으로 한 구현이다.
    특징: 모든 키는 자연 순서 또는 생성자에 제공된 Comparator 에 의해 정렬된다.
    성능: get , put , remove 와 같은 주요 작업들은 O(log n) 의 시간 복잡도를 가진다.
    순서: 키는 정렬된 순서로 저장된다.

Map 구현

Map<String, Integer> studentMap = new HashMap<>();
//학생 성적 데이터 추가
studentMap.put("studentA", 90);
studentMap.put("studentB", 80);
studentMap.put("studentC", 80);
studentMap.put("studentD", 100);
//특정 학생 값 조회
Integer result = studentMap.get("studentD");
System.out.printf("result = "+result); //result = 100
//Map의 키값을 통해서 value를 찾는다.
//keySet 활용
        Set<String> keySet = studentMap.keySet();
        for(String key : keySet){
            Integer value = studentMap.get(key);
            System.out.printf("key = "+key+", value = "+value);

keySet활용결과
key = studentB, value = 80
key = studentA, value = 90
key = studentD, value = 100
key = studentC, value = 80

  //entrySet 활용
    Set<Map.Entry<String, Integer>> entries = studentMap.entrySet();
    for (Map.Entry<String, Integer> entry : entries) {
        String key = entry.getKey();
        Integer value = entry.getValue();
        System.out.println("key=" + key + ", value=" + value);
    }
entrySet활용 결과
key=studentB, value=80
key=studentA, value=90
key=studentD, value=100
key=studentC, value=80
//values 활용
    Collection<Integer> values = studentMap.values();
    for (Integer value : values) {
        System.out.println("value = " + value);
    }
values 활용결과
value = 80
value = 90
value = 100
value = 80

0개의 댓글