개발공부/JAVA
[JAVA] Map 컬렉션
jnnjnn
2024. 3. 20. 18:24
Map 컬렉션은 키(key)와 값(value)로 구성된 엔트리(Entry) 객체를 생성한다. 여기서 키와 값은 모두 객체이다.
Map에서 키는 중복 저장할 수 없다. 다만 값은 중복 저장할 수 있다. 기존에 저장된 키와 동일한 키로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 대치된다.
Map 인터페이스를 구현한 클래스로는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap 등이 있다.
Map 컬렉션에서 공통적으로 사용 가능한 메소드는 다음과 같다.
키로 객체들을 관리하기 때문에 키를 매개값으로 갖는 메소드가 많다.
기능 | 메소드 | 설명 |
객체 추가 | V put(K key, V value) | 주어진 키와 값을 추가, 저장이 되면 값을 리턴 |
객체 검색 | boolean containsKey(Object key) | 주어진 키가 있는지 여부 |
boolean containsValue(Object value) | 주어진 값이 있는지 여부 | |
Set<Map.Entry<K,V>> entrySet() | 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴 | |
V get(Object key) | 주어진 키의 값을 리턴 | |
boolean is Empty | 컬렉션이 비어있는지 여부 | |
Set<K> keySet() | 모든 키를 Set 객체에 담아서 리턴 | |
int size() | 저장된 키의 총 수를 리턴 | |
객체 삭제 | V remove(Object key) | 주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴 |
HashMap
HashMap은 키로 사용할 객체가 hashCode() 메소드의 리턴값이 같고 equals() 메소드가 true를 리턴할 경우, 동일 키로 보고 중복 저장을 허용하지 않는다.
다음과 같이 HashMap 컬렉션을 생성할 수 있다.
Map<K, V> map = new HashMap<K, V>();
HashMap에서 Map 메소드를 사용하는 예제이다.
Map<String, String> map = new HashMap<>();
// entry 추가
map.put("java", "programming language");
map.put("css", "style sheet");
map.put("html", "hypertext markup language");
map.put("spring", "java framework");
map.put("react", "frontend library");
map.put("css", "style sheet");
// map 크기
System.out.println(map.size()); // 5
// entry 검색
boolean b1 = map.containsKey("java"); // true
boolean b2 = map.containsKey("css"); // true
boolean b3 = map.containsKey("jsp"); // false
System.out.println("b1 = " + b1);
System.out.println("b2 = " + b2);
System.out.println("b3 = " + b3);
// entry의 value 얻기
String value1 = map.get("java");
String value2 = map.get("react");
String value3 = map.get("jsp");
System.out.println("value1 = " + value1);
System.out.println("value2 = " + value2);
System.out.println("value3 = " + value3); // null
// entry 수정
map.put("java", "프로그래밍 언어");
String value4 = map.get("java");
System.out.println("value4 = " + value4);
if (map.containsKey("css")) {
map.put("css", "스타일 시트");
}
if (map.containsKey("jsp")) {
map.put("jsp", "java server page");
}
System.out.println(map.get("css"));
System.out.println(map.get("jsp"));
// entry 지우기
System.out.println(map.size());
String value6 = map.remove("css");
System.out.println("value6 = " + value6);
System.out.println(map.size());
String value7 = map.remove("jsp");
System.out.println("value7 = " + value7);
System.out.println(map.size());
다음은 전체탐색을 하는 예제이다
1. keySet을 활용하여 전체탐색
// 1.keySet
Set<String> keys = map.keySet();
// enhanced for
System.out.println("#####keySet && 향상된 for 활용");
for (String key : keys) {
System.out.println(key + ":" + map.get(key));
}
// forEach
System.out.println("##### forEach문 활용");
keys.forEach((x) -> System.out.println(x + "," + map.get(x)));
// iterator
System.out.println("#####Iterator 사용");
Iterator<String> iterator = keys.iterator();
while (iterator.hasNext()) {
String k = iterator.next();
String v = map.get(k);
System.out.println(k + "," + v);
}
2. entrySet 활용하여 전체탐색
// 2. entrySet
// enhanced for
System.out.println("##### entrySet && 향상된 for문 활용");
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
// forEach
System.out.println("##### entrySet && forEach 문");
entries.forEach((x) -> System.out.println(x.getKey() + " , " + x.getValue()));
// iterator
System.out.println("##### entrySet && Iterator");
Set<Entry<String, String>> entrySet = map.entrySet();
Iterator<Entry<String, String>> iterator1 = entries.iterator();
while (iterator1.hasNext()) {
Entry<String, String> entry = iterator1.next();
String k = entry.getKey();
String v = entry.getValue();
System.out.println(k + "," + v);
}
3. forEach를 사용하여 전체탐색
// 3. forEach
map.forEach((k, v) -> System.out.println(k + "," + v));