[자료구조] Map 이해하기

정은아·2024년 1월 1일
post-thumbnail

💡 자료구조 Map에 대해 알아보자!


Map 컬렉션 클래스

  • Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가진다.
  • Map 인터페이스를 구현한 Map 컬렉션 클래스들은 키와 값을 하나의 쌍으로 저장하는 방식(key-value 방식)을 사용한다.
  • 키(key)란 실질적인 값(value)을 찾기 위한 이름의 역할을 뜻한다.

Map이란?

  • Map은 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다.
  • 맵(Map)의 가장 큰 특징이라면 key로 value를 얻어낸다는 점이다.
  • 특징
    1. 요소의 저장 순서를 유지하지 않습니다.
    2. key    :  중복을 허용 X
        value :  중복은 허용 O
  • 사용 형식은 Map <class> name = new ~~ <>(); 으로 사용하면 된다.
    • 왜 Map으로 시작할까? interface 때문!

Map의 종류

HashMap

  • 해시 알고리즘(hash algorithm)을 사용하여 많은 양의 데이터를 검색하는데 검색 속도가 매우 빠르다.
  • HashMap 클래스는 Map 인터페이스를 구현하므로, 중복된 키로는 값을 저장할 수 없다.
  • value에 null값도 사용 가능하다.

TreeMap

  • TreeMap은 이진트리를 기반으로 한 Map 컬렉션이다.
  • 같은 Tree구조로 이루어진 TreeSet과의 차이점은 TreeSet은 그냥 값만 저장한다면, TreeMap은 키와 값이 저장된 Map, Entry를 저장한다는 점이다.
  • TreeMap에 객체를 저장하면 자동 정렬되는데, 키는 저장과 동시에 자동 오름차순으로 정렬되고 타입이 숫자일 경우 값으로, 문자열일 경우 유니코드로 정렬한다.
  • TreeMap은 일반적으로 Map으로써 성능이 HashMap보다 떨어진다.
  • TreeMap은 데이터를 저장할 때 즉시 정렬하기에 추가나 삭제가 HashMap보다 오래 걸린다.

LinkedHashMap

  • LinkedHashMap의 Entry들은 이중 연결 리스트로 구현되어있다.
  • 입력된 순서대로 Key가 보장되므로 해당 문제를 해결할 수 있다.
  • 사용법은 HashMap과 동일하다.

Hashtabl

  • 거의 사용 X

HashMap

  • 말 그대로 해싱(Hashing)된 맵(Map)이다. 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보여준다.
  • 키(Key)와 값(Value)로 구성된 Entry 객체를 저장하는 구조를 가지고 있는 자료구조이다. 여기서 키와 값은 모두 객체이다.
  • 해시 함수를 통해 키와 값이 저장되는 위치를 결정하므로, 그 위치를 알 수 없고 삽입되는 순서와 들어 있는 위치 또한 관계가 없다. 삽입한 순서에 따라 정렬되지 않는다.
  • 키로 값을 추출하기 = 가능
  • 값으로 키를 추출하기 = 불가능
  • 자주 사용되는 메서드는 put()과 변수명.get(key) 등이 있으며 forEach문과 함께 사용된다.
  • ex.
HashMap<String,Integer> cart = new HashMap<>();
			put = 값을 넣어주는 것 / get = 값을 가져오는 것 
       cart.put("커피",3);
       cart.put("우유",2);
       cart.put("바나나",5);

       if(cart.containsKey("우유")) {
           int amount = cart.get("우유");
           cart.put("우유", amount + 4);
       }else{
           cart.put("우유",9);

       }

       for (String key : cart.keySet()){
						// key값 반환
            System.out.println( key);
            // value값 반환
						System.out.println( cart.get(key) );
            System.out.println("저는 "+key+"를 "+cart.get(key)+"개 장바구니에 담았어요");
        }

💡 자주쓰는 Map의 메서드 5개 알고가기

  • getOrDefault(키값, 대체할값)
  • containsKey(키값) ⇒ boolean값으로 반환해준다.
  • size() ⇒ key의 갯수를 알려준다.
  • remove(키값) ⇒ 특정 키를 삭제한다.
  • isEmpty() = 안에 값이 있는지 없는지 확인한다.
profile
꾸준함의 가치를 믿는 개발자

0개의 댓글