Map 컬렉션 클래스

김남건·2021년 7월 24일
0
post-thumbnail

Map 인터페이스

Collection 인터페이스와는 다른 저장 방식을 가진다. (key, value) 쌍으로 구성된 Map.Entry라는 객체들을 저장하는 구조이다. 제네릭이어서 key와 value는 모두 객체이다.

구현한 클래스로는 HashMap, Hashtable, TreeMap이 있다.

특징

  1. 요소의 저장 순서를 유지하지 않는다.
  2. key의 중복은 안되고, value는 중복해도 된다.

메서드

추가, 삭제 메서드

메서드설명
V put(K key, V value)주어진 key와 value를 추가, 저장이 되면 value를 반환
V remove(Object key)주어진 key와 일치하는 Map.Entry를 삭제
삭제되면 해당 Map.Entry의 value를 반환
void clear()모든 Map.Entry 객체를 삭제

검색 메서드

메서드설명
boolean containsKey(Object key)주어진 key가 있는지
boolean containsValue(Object value)주어진 value가 있는지
Set<Map.Entry<K, V>> entrySet()모든 Map.Entry 객체들을 Set에 담아서 반환
V get(Object key)주어진 key에 해당하는 value를 반환
boolean isEmpty()컬렉션이 비어 있는지 여부
Set<K> keySet()모든 key를 Set에 담아서 반환
int size()저장된 key 개수를 반환
Collection<V> values()모든 value를 Collection에 담아서 반환

HashMap<K, V> 클래스

해시 알고리즘을 사용하여 검색 속도가 빠르다. Map 인터페이스를 구현하기 때문에, 중복된 키는 허용되지 않으며, 같은 값을 다른 key로 저장할 수는 있다.

예시

HashMap<String, Integer> hm = new HashMap<String, Integer>();

// put() 메소드를 이용한 요소의 저장
hm.put("삼십", 30);
hm.put("십", 10);
hm.put("사십", 40);
hm.put("이십", 20);

// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
System.out.println("맵에 저장된 키들의 집합 : " + hm.keySet());
for (String key : hm.keySet()) {
    System.out.println(String.format("키: %s, 값: %s", key, hm.get(key)));
}

// remove() 메소드를 이용한 요소의 제거
hm.remove("사십");

// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<String> keys = hm.keySet().iterator();
while (keys.hasNext()) {
    String key = keys.next();
    System.out.println(String.format("키: %s, 값: %s", key, hm.get(key)));
}

// replace() 메소드를 이용한 요소의 수정
hm.replace("이십", 200);

for (String key : hm.keySet()) {
    System.out.println(String.format("키: %s, 값: %s", key, hm.get(key)));
}

// size() 메소드를 이용한 요소의 총 개수
System.out.println("맵의 크기 : " + hm.size());

Hashtable<K, V> 클래스

HashMap과 같은 동작을 하는 클래스로, 사용할 수 있는 메서드가 거의 같다. 기존 코드와의 호환성을 위해서만 남아 있으므로, HashMap을 대신 사용하는 것이 좋다.

Hashtable의 메서드는 동기화 메서드이기 때문에 복수의 스레드가 동시에 접근하더라도 추가, 삭제 등을 안전하게 수행할 수 있다.(Vector와 비슷)

TreeMap<K, V> 클래스

JDK 1.2부터 제공된 클래스로, key-value 데이터를 Binary Search Tree 형태로 저장하기 때문에 추가, 제거 등의 동작 시간이 매우 빠르다.

NavigableMap 인터페이스를 Red-Black Tree로 구현한다.
Map 인터페이스를 구현하였기 때문에 중복된 키는 허용하지 않고, 중복된 값은 가능하다.

메서드

http://tcpschool.com/java/java_collectionFramework_map 참조

예시

TreeMap<Integer, String> tm = new TreeMap<Integer, String>();

// put() 메소드를 이용한 요소의 저장
tm.put(30, "삼십");
tm.put(10, "십");
tm.put(40, "사십");
tm.put(20, "이십");

// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
System.out.println("맵에 저장된 키들의 집합 : " + tm.keySet());
for (Integer key : tm.keySet()) {
    System.out.println(String.format("키: %s, 값: %s", key, tm.get(key)));
}

// remove() 메소드를 이용한 요소의 제거
tm.remove(40);

// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<Integer> keys = tm.keySet().iterator();
while (keys.hasNext()) {
    Integer key = keys.next();
    System.out.println(String.format("키: %s, 값: %s", key, tm.get(key)));
}

// replace() 메소드를 이용한 요소의 수정
tm.replace(20, "twenty");

for (Integer key : tm.keySet()) {
    System.out.println(String.format("키: %s, 값: %s", key, tm.get(key)));
}

// size() 메소드를 이용한 요소의 총 개수
System.out.println("맵의 크기 : " + tm.size());

Reference

http://tcpschool.com/java/java_collectionFramework_map

0개의 댓글

관련 채용 정보