Map이란?

구교석·2024년 5월 26일
post-thumbnail

Map이란?

"Map은 Key와 Value 한쌍으로 이루어진 자료형이다."

  • Map은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻는다.

  • 값(Value)은 중복될 수 있지만, Key는 고유한 값(Unique)을 가져야 한다.

  • Map은 저장 순서를 유지할 필요가 없고, Key를 통해 Value를 얻어내기 때문에 Key는 중복을 허용하지 않는다.

    Map 사용법과 종류

put(key, value)

Map에 키와 값 쌍을 저장합니다. 만약 이미 동일한 키가 있을 경우, 값을 덮어씁니다.

get(key)

Map에서 키에 해당하는 값을 가져옵니다. 해당 키가 Map에 없을 경우 null을 반환합니다.

remove(key)

Map에서 키에 해당하는 값을 제거합니다. 해당 키가 없다면 아무런 작업도 수행하지 않습니다.

keySet

Map에 저장된 모든 키를 Set 형태로 반환하는 메서드입니다. 반환된 키 Set을 사용하여 모든 키를 반복 처리할 수 있습니다.

value

Map에 저장된 모든 값을 Collection 형태로 반환하는 메서드입니다. 반환된 값들의 컬렉션을 사용하여 모든 값을 반복 처리할 수 있습니다.

entrySet

Map에 저장된 모든 키-값 쌍을 Set 형태로 반환하는 메서드입니다. 반환된 키-값 쌍 Set을 사용하여 모든 항목을 반복 처리할 수 있습니다.

containsKey

Map에 특정 키가 있는지 확인하는 메서드입니다. 인수로 키 객체를 받아 해당하는 키가 있으면 true를 반환하고, 없으면 false를 반환합니다.

containsValue

Map에 특정 값이 있는지 확인하는 메서드입니다. 인수로 값 객체를 받아 해당하는 값이 있으면 true를 반환하고, 없으면 false를 반환합니다.

 // put(key, value) - 키와 값 쌍을 저장
        linkedHashMap.put("apple", 3);
        linkedHashMap.put("banana", 5);
        linkedHashMap.put("orange", 2);
        System.out.println("After put operations: " + linkedHashMap);

        // get(key) - 키에 해당하는 값 가져오기
        int appleCount = linkedHashMap.get("apple");
        System.out.println("apple: " + appleCount);

        // get(key) - 존재하지 않는 키의 경우 null 반환
        Integer mangoCount = linkedHashMap.get("mango");
        System.out.println("mango: " + mangoCount);  // Should print null

        // remove(key) - 키에 해당하는 값 제거
        linkedHashMap.remove("banana");
        System.out.println("After removing banana: " + linkedHashMap);

        // keySet() - 모든 키를 Set 형태로 반환
        Set<String> keys = linkedHashMap.keySet();
        System.out.println("Keys: " + keys);

        // values() - 모든 값을 Collection 형태로 반환
        Collection<Integer> values = linkedHashMap.values();
        System.out.println("Values: " + values);

        // entrySet() - 모든 키-값 쌍을 Set 형태로 반환
        Set<Map.Entry<String, Integer>> entries = linkedHashMap.entrySet();
        System.out.println("Entries: " + entries);

        // containsKey(key) - 특정 키가 있는지 확인
        boolean hasApple = linkedHashMap.containsKey("apple");
        System.out.println("Contains apple? " + hasApple);

        // containsValue(value) - 특정 값이 있는지 확인
        boolean hasValue2 = linkedHashMap.containsValue(2);
        System.out.println("Contains value 2? " + hasValue2);

        // 반복 처리 - keySet() 사용
        System.out.println("Iterating using keySet:");
        for (String key : keys) {
            System.out.println(key + ": " + linkedHashMap.get(key));
        }

HashMap

HashMap은 가장 널리 사용되는 자바 Map 인터페이스의 구현체 중 하나입니다. HashMap의 주요 특징은 다음과 같습니다

  • 키와 값 쌍을 저장하는 데 사용되는 데이터 구조
  • 키는 중복될 수 없으며, 각 키는 최대 하나의 값에만 매핑할 수 있습니다.
  • 삽입 순서를 유지하지 않습니다. 그 이유는 키의 해시 함수에 따라 데이터가 저장되기 때문입니다.
  • null 키와 null 값이 허용됩니다. 하지만 null 키는 단 하나만 존재할 수 있습니다.
  • 동기화를 지원하지 않습니다. 멀티스레드 환경에서 사용할 경우 외부 동기화가 필요합니다.
HashMap<String, Integer> map = new HashMap<>();

TreeMap

TreeMap(트리맵)은 레드-블랙 트리 자료 구조를 기반으로 구현된 맵입니다. 이 데이터 구조는 키(key)에 대한 정렬을 보장하는 이진 검색 트리(binary search tree)의 확장으로 다음과 같은 특징을 가지고 있습니다.

  • 키(key)를 기준으로 오름차순(default)정렬되어있음. 사용자가 정의한 정렬을 따름
  • 키(key)의 빠른 검색, 삽입, 삭제 (레드-블랙 트리의 특징)
  • 사용자가 정의한 정렬을 사용하려면, comparator를 구현해야 합니다.
  • 키에 null 값을 사용할 수 없음, 반면에 값(value)는 null을 저장할 수 있음.
  TreeMap<String, Integer> treeMap = new TreeMap<>();

LinkedHashMap

LinkedHashMap은 HashMap과 거의 유사한 성능을 제공하는 데이터 구조입니다. LinkedHashMap은 다음과 같은 특징이 있습니다.

  • LinkedHashMap은 키와 값 쌍을 저장한 순서대로 조회할 수 있습니다.
    빠른 검색, 삽입, 삭제

  • LinkedHashMap은 키-값 쌍의 삽입, 삭제 및 조회에 있어서 빠른 성능을 제공합니다.

  • 해시테이블(Hash table)과 Linked list로 구현

  • LinkedHashMap의 내부 구조는 해시테이블과 Linked list를 사용하여 구현되어 있습니다. Linked list를 통해 입력 순서를 유지하면서 동시에 해시 알고리즘을 사용해 복잡한 데이터 연산이 빠르게 이루어질 수 있게 합니다.

  • 키와 값에 null 저장 가능

  • LinkedHashMap은 클라이언트에게 HashMap과 거의 동일한 인터페이스를 제공합니다. 따라서 여러 null 키-값 쌍을 저장할 수 있습니다.

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

참고 사이트


맵(Map) 이란?

profile
끊임없이 노력하는 개발자

0개의 댓글