Map이란?
- Map은 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다.
- 맵(Map)의 가장 큰 특징이라면 key로 value를 얻어낸다는 점이다.
- List와 달리, Map에는 순서가 없다.
HashMap이란?
- HashMap은 Map을 구현한다. key와 value를 묶어 하나의 entry로 저장한다는 특징을 갖는다.
- 해시 알고리즘(hash algorithm)을 사용하여 많은 양의 데이터를 검색하는데 검색 속도가 매우 빠르다.
- key, value의 쌍으로 관리하므로, Iteration 객체를 사용하지 않고 해당 key에서 데이터의 값을 바로 추출할 수 있다.
- value에 null값도 사용 가능하다.(즉, null 을 가지는 key 는 2개일 수 없다)
- 유사한 성격의 클래스로는 HashTable, TreeMap 등이 있다.
- 멀티쓰레드에서는 HashTable을 사용한다.
HashMap <k,v> 주요 메소드
void clear() | 해당 맵(map)의 모든 매핑(mapping)을 제거함. |
boolean containsKey(Object key) | 해당 맵이 전달된 키를 포함하고 있는지를 확인함. |
boolean containsValue(Object value) | 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함. |
V get(Object key) | 해당 맵에서 전달된 키에 대응하는 값을 반환함. 만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함. |
boolean isEmpty() | 해당 맵이 비어있는지를 확인함. |
Set<K> keySet() | 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함. |
V put(K key, V value) | 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함. |
V remove(Object key) | 해당 맵에서 전달된 키에 대응하는 매핑을 제거함. |
boolean remove(Object key, Object value) | 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함. |
V replace(K key, V value) | 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함. |
boolean replace(K key, V oldValue, V newValue) | 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함. |
int size() | 해당 맵의 매핑의 총 개수를 반환함. |
예제로 보는 사용법
HashMap 생성
Map<"key의 데이터타입", value의 데이터입> 변수명 = new HashMap(); 으로 생성
Map<String, Integer> map = new HashMap();
or
HashMap<String, Integer> map = new HashMap();
put()
put(키,값) 으로 MapCollection에 저장된다.
map.put("짱구", 200);
map.put("철수", 400);
get()
get(키) 으로 해당 키값을 꺼낼 수 있다.
// {철수=400, 짱구=200}, 200, 400
System.out.println(map);
System.out.println(map.get("짱구"));
System.out.println(map.get("철수"));
containsKey()
containsKey(키) 메소드는 해당 키에 철수가 있는지 확인하는 메소드다
// true
System.out.println(map.containsKey("철수"));
remove()
remove(키) 해당 키를 삭제하는 메소드다.
// false
map.put("유리", 400);
map.remove("유리");
System.out.println(map.containsKey("유리"));
putAll()
putAll(new HashMap()) -> putAll() 은 같은 데이터타입을 가진 다른 Map을 전부 포함하게 된다.
Map<String, Integer> newMap = new HashMap();
//1 {철수=400, 짱구=200}
newMap.putAll(map);
System.out.println(newMap);
Foreach()
Map은 Foreach() 메소드를 이용하여 순환하면서 키-값 을 꺼낼 수 있다.
/* 2 key = 철수 value = 400, key = 짱구 value = 200 */
newMap.forEach((key,value) -> System.out.println("key = " + key + " value = " + value));
keySet()
Map은 index가 없지만 ketSet()를 이용하면 key를 set으로 넘겨주어 Map에 존재하는 키를 모두 순회할 수 있다.
//3 철수 짱구
for (String key : newMap.keySet()){
System.out.println(key);
}
중복된 값
중복된 값은 덮어 씌어진다.
// 중복된 값은 덮어진다. {철수=400, 짱구=400}
newMap.put("짱구", 400);
System.out.println(newMap);
전체 예제
package collection.map;
import java.util.*;
public class HashMapExercise {
public static void main(String[] args) {
/*
* 1) Map<"key의 데이터타입", value의 데이터입> 변수명 = new HashMap(); 으로 생성
* 2) put() = put(키,값) 으로 MapCollection에 저장된다.
* 3) get() = get(키) 메소드로 키를 입력하면 값이 나온다.
* 4) containsKey() = containsKey(키) 메소드는 해당 키에 철수가 있는지 확인하는 메소드다
* 5) remove() = remove(키) 해당 키를 삭제하는 메소드다.
* */
//1
Map<String, Integer> map = new HashMap();
//2
map.put("짱구", 200);
map.put("철수", 400);
//3 {철수=400, 짱구=200}, 200, 400
System.out.println(map);
System.out.println(map.get("짱구"));
System.out.println(map.get("철수"));
//4 true
System.out.println(map.containsKey("철수"));
// false
map.put("유리", 400);
map.remove("유리");
System.out.println(map.containsKey("유리"));
/*
* 1) putAll() = putAll(new HashMap()) -> putAll() 은 같은 데이터타입을 가진 다른 Map을 전부 포함하게 된다.
* 2) Foreach() = Map은 Foreach() 메소드를 이용하여 순환하면서 키-값 을 꺼낼 수 있다.
* 3) keySet() = Map은 index가 없지만 ketSet()를 이용하면 key를 set으로 넘겨주어 Map에 존재하는 키를 모두 순회할 수 있다.
* */
Map<String, Integer> newMap = new HashMap();
//1 {철수=400, 짱구=200}
newMap.putAll(map);
System.out.println(newMap);
// 2 key = 철수 value = 400, key = 짱구 value = 200
newMap.forEach((key,value) -> System.out.println("key = " + key + " value = " + value));
//3 철수 짱구
for (String key : newMap.keySet()){
System.out.println(key);
}
// 중복된 값은 덮어진다. {철수=400, 짱구=400}
newMap.put("짱구", 400);
System.out.println(newMap);
}
}
전체 코드
'몰아 넣기' 카테고리의 다른 글
[collection] 큐(queue) 무엇인가요? (0) | 2022.08.19 |
---|---|
[알고리즘] 시간 복잡도와 Big-O 대해서 간단한 예제 (0) | 2022.08.18 |
[JUnit5] JUnit5 개념 및 간단한 사용법 (0) | 2022.08.13 |
[Java/Spring] Spring Boot 메일 발송하기(Google SMTP With thymeleaf) (0) | 2022.07.18 |
[java8] 자바 Stream의 foreach 와 for-loop에 대해서 (0) | 2022.07.14 |