Map 개요
키(key)와 값(value)으로 구성된 Map.Entry객체를 저장하는 데이터 집합이다. key는 중복될 수 없지만, value는 중복을 허용한다.
Map 컬렉션의 구현 클래스
EnumMap, HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등
HashTable | -Key, Value는 null 이 될 수 없다. key는 중복 불가능 -스레드 동기화를 지원한다 |
HashMap | -Key, Value에 null을 허용한다(1개씩만) -스레드 동기화 지원하지 않는다 |
주요 메서드
메서드 | 내용 |
void clear() | key와 value로 연결된 모든 mapping 삭제 |
boolean containsKey(Object key) | key 를 가지고 있는지 여부 |
boolean containsValue(Object value) | 개수에 상관없이 value를 가지고 있는지 여부 |
Set<Map.Entry<K,V>> entrySet() | Map.Entry형식의 Set 객체 리턴하기 |
boolean equals(Object o) | 동일한 Object인지 여부 |
V get(Object key) | 특정 key 와 매핑된 value 리턴. 없으면 null |
boolean isEmpty() | Map이 비어있는지 여부 |
Set<K> keySet() | Key값으로 이루어진 Set 리턴 |
V put(K key, V value) | 특정 key-value값의 mapping 삽입하기 이미 key값이 있으면 새로운 value값으로 대체 |
default V putIfAbsent(K key, V value) | key에 매핑된 value값이 없거나 null 이라면 새로운 값을 넣고 null 리턴, 매핑되어있으면 현재값 반환 |
V remove(Object key) | key 값에 해당하는 매핑 삭제 |
default V replace(K key, V value) | 특정 key-value값의 mapping 대체하기 |
default boolean replace( K key, V oldValue, V newValue) |
key의 매핑이 oldValue 에 해당할 경우에만 newValue로 대체하기 |
int size() | Map 크기 리턴 |
Collection<V> values() | Value를 Collection 형태로 반환 |
HashMap
HashMap 은 해시함수를 이용해 Map 내부에 key-value 매핑을 저장한다. Map 내부의 매핑 순서는 보장되지 않는다.
HashMap 의 성능에 영향을 주는 요인이 2개 있다. initial capacity 와 load factor 라는 것인데, intial capacity 는 HashMap 을 생성하며 초기에 설정한 용량을 말한다. 만약 설정한 용량의 범위를 넘어서게 되면 Map은 자동으로 크기가 증가하게 된다. Map이 자동으로 증가시키기 전에 얼마나 적재(load)할지 정해놓은 정도가 load factor 이다.
java docs 를 참고하면 load factor는 0.75가 디폴트 값으로 설정되어있다. 이보다 값이 크면 공간을 새로 확대하는 민감도는 감소하지만 검색비용이 높아진다고 기술되어있다.
HashMap의 크기가 재설정되면 hashMap은 rehash 라는 과정을 거치는데, 즉 Map의 구조가 변경되면서 다시 용량을 확대시키는 것이다. 당연히 이 과정이 많을수록 성능에 영향을 주기 때문에 설계시 고려가 필요하다.

생성 예시
Map<String, Integer> map01 = new HashMap<String, Integer>();
Map<String, Integer> map02 = new HashMap<>();
코드 예제
public class Test_HashMap {
public static void main(String[] args) {
Map<String, Integer> mapStudent = new HashMap();
String[] strArr = {"김연아", "이용대", "박지성", "손흥민", "김자인", "류현진"};
Integer[] intArr = {92, 12, 68, 38, 84, 25};
//map에 값 넣기
for(int i=0; i<strArr.length; i++){
mapStudent.put(strArr[i], intArr[i]);
}
//keySet()메서드를 사용해 key값으로 이루어진 Set 가져오기
Set<String> setName = mapStudent.keySet();
for(String str : setName){
System.out.print(str+ " "); //김연아 손흥민 류현진 박지성 이용대 김자인
}
for(String str : setName){
int score = mapStudent.get(str);
System.out.println(str+ "의 점수 : "+ score);
}
/*
김연아의 점수 : 92
손흥민의 점수 : 38
류현진의 점수 : 25
박지성의 점수 : 68
이용대의 점수 : 12
김자인의 점수 : 84
*/
}
}
HashTable
HashMap 과 동일한 기능을 제공한다. 단, key와 value 에 null을 허용하지 않고,
동기화(synchronized) 기능이 포함되어 멀티스레드를 지원한다는 기능만 차이가 있다.

'Java > 기본' 카테고리의 다른 글
[Java] 컬렉션프레임워크202 - Properties (0) | 2021.06.25 |
---|---|
[Java] 컬렉션프레임워크201 - Comparable, Comparator (0) | 2021.06.25 |
[Java] 컬렉션프레임워크104 - Set 컬렉션 (0) | 2021.06.24 |
[Java] 컬렉션프레임워크103 - List 컬렉션 - Stack, queue (0) | 2021.06.24 |
[Java] 컬렉션프레임워크102 - List 컬렉션 - ArrayList, LinkedList, Vector (0) | 2021.06.24 |