ABOUT ME

작은 디테일에 집착하는 개발자

Today
-
Yesterday
-
Total
-
  • [Java] 컬렉션 프레임워크 4 (Map, HashMap 중심으로)
    IT Study/컴퓨터 기초 2023. 3. 29. 19:14
    728x90

     

    1. Map 인터페이스란?

    Map 인터페이스는 키-값 쌍의 데이터를 저장하는 컬렉션 프레임워크입니다.

    키(Key)는 유일해야 하지만, 값(Value)은 중복이 가능하다는 특징을 가집니다. (저장 순서는 보장하지 않습니다.)

    → 따라서 키(Key)를 통해 값(Value)을 검색할 수 있습니다. (Key, Value null 가능)

     

    더하여 Key-Value 쌍을 entry(엔트리)라고 합니다.

    ☑️ 아래의 Entry 인터페이스와 이름이 동일하기 때문에 헷갈릴 수 있습니다.
         Entry 인터페이스는 인터페이스라는 정확한 명칭을 붙여 설명할테니,
         그냥 엔트리라고 적혀있다면 키-값 쌍으로 생각해주세요.

     

    1-1. Map.Entry 인터페이스

    Entry 인터페이스는 Map.Entry라는 이름으로 java.util 패키지에 선언된 인터페이스입니다.

    Entry 인터페이스는 Key-Value 쌍을 나타내는 객체를 다룰 때에 사용되는 인터페이스입니다.

     

    1-1-1. Map.Entry 인터페이스의 메서드

    이름 매개변수 기능 반환타입
    getKey() - 엔트리의 Key 반환 K (엔트리의 Key 타입)
    getValue() - 엔트리의 Value 반환 V (엔트리의 Value 타입)
    setValue(V v) 수정할 Value 엔트리의 Value를
    수정할 Value로 변경
    V
    equals(Object o) 비교할 객체 엔트리 객 boolean, 동일 시 true

     

    1-1-2. Entry(엔트리 인터페이스)와 Iterator(이터레이터 인터페이스)

    Map 인터페이스에서는 엔트리(키 - 값)를 하나씩 가져오기 위해

    entrySet() 메서드 그리고 Iterator와 iterator() 메서드를 사용합니다.

    (🗯️ 아래 예시를 읽어보고, 본인이 원하는 메서드를 선택해서 사용하세요! 저는 EntrySet이 편할 것 같습니다.. 쿄쿄)

     

    <entrySet을 사용하는 경우>

    Map<String, Integer> map = new HashMap<>();
    map.put("apple", 1);
    map.put("banana", 2);
    map.put("cherry", 3);
    
    for(Map.Entry<String, Integer> entry : map.entrySet()) {
        String key = entry.getKey();
        Integer value = entry.getValue();
        System.out.println("Key: " + key + ", Value: " + value);
    }
    <출력>
    Key: banana, Value: 2

    Key: apple, Value: 1
    Key: cherry, Value: 3

     

    <Iterator(이터레이터)를 사용하는 경우>

    Map<String, Integer> map = new HashMap<>();
    map.put("apple", 1);
    map.put("banana", 2);
    map.put("cherry", 3);
    
    Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();
    while(iter.hasNext()) {
        Map.Entry<String, Integer> entry = iter.next();
        String key = entry.getKey();
        Integer value = entry.getValue();
        System.out.println("Key: " + key + ", Value: " + value);
    }
    <출력>
    Key: banana, Value: 2
    Key: apple, Value: 1
    Key: cherry, Value: 3

     

    2. HashMap

    가장 일반적으로 사용되는 Map 인터페이스를 구현한 클래스입니다.

    Key-Value로 이뤄진 Entry 객체를 해시 테이블에 저장하는 방식으로 동작합니다.

     

    2-1. HashMap인터페이스의 메서드

    이름 매개변수 기능 반환타입
    clear() - Map의 모든 K-V 제거 -
    clone() - Map의 복사본 생성 Object, 복사본 반환
    containsKey(Object k) 존재하는지 확인할 Key Map 내 Key 존재 여부 확인 boolean, 존재 시 true
    containsValue(Object v) 존재하는지 확인할 Value Map 내 Value 존재 여부 확인 boolean, 존재 시 true
    entrySet() - Map 내 모든 K-V를 담은
    Set 객체 반환
    Set,엔트리 형태로
    Set에 저장해 반환
    equals(Object o) 비교할 객체 Map과 객체가 동일한지 확인 boolean, 동일 시 true
    get(Object k) Key 객체 Key에 대응하는 Value 반환
    (대응 값 없을 시 null 반환)
    V, Value 객체 반환
    getOrDefault
    (Object k, V defaultValue)
    Key 객체,
    null 시의 기본 값
    Key에 대응하는 Value 반환
    (대응 값 없을 시 기본 값 반환)
    V, Value 객체 반환
    isEmpty() - Map 비어 있는지 확인 boolean, 비어 있으면 true
    keySet() - Map의 모든 Key 담은
    Set 객체 반환
    Set
    put(Object k, Object v) 추가할 Key 객체,
    추가할 Value 객체
    Map에 K-V 추가 Object
    putAll(Map m) 추가할 Map Map에
    추가할 Map의 모든 요소 추가
    -
    remove(Object k) 제거할 Value의 Key Key의 Value 제거 Object, 제거된 값 반환
    (제거된 값 없을 시 null)
    replace
    (Object k, Object newValue)
    변경할 값의 Key,
    새로운 Value
    Key의 Value를
    새로운 Value로 변경
    Object, 변경 전 값 반환
    (변경된 값 없을 시 null)
    replace
    (Object k, Object v,
     Object newValue)
    변경할 값의 Key,
    변경할 값의Value,
    새로운 Value
    Key와 Value 일치 시
    새로운 Value로 변경
    boolean, 변경 시 true
    size() - Map의 요소 수 반환 int
    values() - Map의 모든 K-V를
    컬렉션 형태로 반환
    Collection

     

    3. TreeMap

    TreeMap에서는 Red-Black Tree라는 구조를 이용한 클래스입니다.

    Key의 정렬을 유지하고 있어, 저장된 데이터를 순서대로 탐색할 수 있다는 특징을 가지고 있습니다.

    Key의 정렬을 유지하는 만큼, Key 값으로 null을 사용할 수 없습니다.

     

    4. LinkedHashMap

    해시 테이블과 연결 리스트를 조합한 클래스입니다.

    HashMap과 마찬가지로 Key-Value로 이뤄진 Entry 객체를 해시 테이블에 저장하는 방식으로 동작하는데,

    연결 리스트에 데이터를 추가로 연결할 수 있습니다. 따라서 그 순서를 유지하며 탐색할 수 있다는 점이 특징입니다.

Designed by Tistory.