Map 인터페이스

 

많은 데이터 중에서 원하는 데이터를 빠르게 찾을 수 있는 자료 구조이다.

 

- 일반적으로 사전에 비유를 하는데, 사전은 단어가 있으면 단어에 대한 설명이 있다. Map에서는 그 단어(데이터) (Key)“라고 부르고 단어(데이터)에 대한 설명을 (Value)“이라고 부른다.

 

중복된 키를 가질 수 없다각 키는 오직 하나의 값에만 매핑될 수 있다.

 

키가 제시되면 Map은 값을 반환한다.


 예를 들어 학생에 대한 정보를 Map에 저장할 때 키를 학번으로 두고, 값을 학생의 이름으로 할 때, 학번이 제시되면 Map은 학생의 이름을 반환한다.


소드

 void clear()

 Map의 모든 항목들을 삭제한다.

 boolean containsKey(Object key)

 Map이 해당 키에 매핑되는 값을 가지고 있다면 true, 없다면 false를 반환한다.

 boolean containsValue(Object value)

 Map이 해당 값에 대한 적어도 하나의 키를 가지고 있다면 true, 없다면 false를 반환한다.

 Set<Map.Entry<K,V>> entrySet()

 Map에 대응되는 집합(Set)을 반환한다.

 boolean equals(Object o)

 Map에 있는 객체들과 매개변수로 넘겨받은 객체와 동등한지 비교한다.

 V get(Object key)

 해당 Key에 맞는 값을 반환한다없으면 null을 반환한다.

 int hashCode()

 해쉬코드를 반환한다.

 boolean isEmpty()

 Map이 어떠한 키와 값도 가지지 않으면 true, 아니면 false를 반환한다.

 Set<K> keySet()

 Map의 Key에만 대응되는 집합(Set)을 반환한다.

 V put(K key, V value) Map에 키, 값을 추가한다.
 void putAll(Map<? extends K,? extends V> m) 매개변수로 넘겨받은 Map을 전체 복사하여 추가한다.
 V remove(Object key) 매개변수로 넘겨받은 Key Map에 존재한다면 삭제한 후 반환한다.
 int size() Map의 키-값 쌍의 개수를 반환한다.
 Collection<V> values() Map의 값에만 대응되는 Collection을 반환한다.



- Map 인터페이스를 구현한 클래스로는 HashMap, TreeMap, LinkedHashMap 등이 있다.

  • HashMap : 해싱 테이블에 데이터를 저장한다. 단, 저장한 순서와는 다르게 Key 값의 순서는 임의적이다.

  • TreeMap : 탐색 트리에 데이터를 저장한다.

  • LinkedHashMap : HashMap의 단점인 임의적인 순서를 보완하여 저장한 순서에 맞게 Key 값을 저장한다.


키들을 정렬된 순서로 방문할 필요가 없다면 HashMap TreeMap보다 빠르다.


- 예제

import java.util.*;

class Student {
    int number;
    String name;

    public Student (int number, String name) {
        this.number = number;
        this.name = name;
    }

    public String toString() {
        return name;
    }
}

public class MapTest {
    public static void main(String[] args) {
        Map<String, Student> stMap = new HashMap<String, Student>();
        stMap.put("01", new Student(01, "김철수"));
        stMap.put("02", new Student(02, "김영희"));
        stMap.put("03", new Student(03, "김자몽"));

        //모든 항목을 출력
        System.out.println("모든 항목을 출력 : " + stMap);

        //하나의 항목을 삭제
        stMap.remove("01"); //김철수 학생의 정보가 삭제된다.

        //하나의 항목을 대치
        stMap.put("03", new Student(03, "김옥자"));

        //값을 참조
        System.out.println("03번 학생의 이름 : " + stMap.get("03"));

        //모든 항목 방문
        for(Map.Entry<String, Student> s : stMap.entrySet()) {
            String key = s.getKey();
            Student value = s.getValue();
            System.out.println("key : " + key + ", value : " + value);
        }
    }
}

[출력 결과]



- Map에 저장된 데이터를 방문할 때는 Map.Entry 라는 인터페이스를 사용한다.

import java.util.*;

public class MapTest {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();

        String[] example = { "Hi", "yes", "or", "not", "Hi", "yes", "no", "a", "and" };

        //문자열에 포함된 빈도 계산하기
        for(String str : example) {
            Integer freq = map.get(str);
            map.put(str, (freq == null) ? 1 : freq+1);
        }

        System.out.println(map.size() + "개의 단어가 있음"); //결과 : 7개의 단어가 있음
        System.out.println("containKey(\"to\") = " + map.containsKey("to"));
        System.out.println("isEmplty() = " + map.isEmpty());
        System.out.println("Map : " + map);
    }
}

[출력 결과]





+ Recent posts