▶ 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); } }
[출력 결과]
'Programming Language > JAVA' 카테고리의 다른 글
43. Thread - 스레드 (8) | 2017.07.24 |
---|---|
42. Collection Class - 컬렉션 클래스 (0) | 2017.07.24 |
40. Queue - 큐, FIFO, 우선순위 큐 (0) | 2017.07.24 |
39. Set, HashSet, TreeSet, LinkedHashSet - 집합 (0) | 2017.07.24 |
38. List interface, ArrayList, LinkedList, Vector - 리스트 인터페이스 (0) | 2017.07.23 |