Java에서 컬렉션이란 데이터의 집합을 의미한다. Collection 인터페이스는 모든 컬렉션의 최상위 인터페이스로 List, Set, Queue 등의 공통 기능을 정의한다. Map의 경우 구조상의 차이로 별도의 인터페이스로 정의되지만 Collection으로 분류된다. 모든 Collection은 저장될 객체의 타입을 지정할 수 있는 제네릭(Generic)타입을 지원한다.
- Set : 순서가 없는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
- 구현클래스 : HashSet, TreeSet
- List : 순서가 있으며(인덱스 존재) 데이터의 중복을 허용한다.
- 구현클래스 : LinkedList, Vector, ArrayList
- Queue : 순서가 있으며 요소는 큐의 앞쪽에서 제거되고, 새로운 요소는 뒤쪽에 추가된다.
- 구현클래스 : LinkedList, PriorityQueue
- Map : 키-값 쌍으로 데이터를 저장하며, 키는 중복을 허용하지 않는다. 키를 통해 매핑된 값을 가져올 수 있다.
- 구현클래스 : HashMap, TreeMap
Map
Map은 키-값 쌍으로 데이터를 저장하며, 키 값은 중복을 허용하지 않고 값은 중복이 되어도 상관이 없다. Map은 Collection과는 다른 구조를 가지고 있기 때문에 별도의 인터페이스로 정의되지만(Collection을 상속받지 않음), 다른 형태로 Collection을 다루는 인터페이스라 말한다. Map에서 가장 많이 사용되는 클래스는 HashMap과 TreeMap이 있다.
HashMap의 경우 순서를 보장하지 않고 빠른 검색 속도를 제공하는 반면, TreeMap은 키의 정렬 순서를 유지한다.
메서드 | 설명 |
.put(key, value) | 키와 값을 맵에 저장한다. |
.get(key) | 지정된 키에 대응하는 값을 반환한다. |
.remove(key) | 키와 지정된 키에 대응하는 값을 제거한다. |
.containsKey(key) | 지정된 키의 존재여부를 반환한다. |
.containsValue(value) | 지정된 값의 존재여부를 반환한다. |
.keySet() | 모든 키를 담아 반환한다. |
.value() | 모든 값을 담아 반환한다. |
.entrySet() | 모든 키-값을 반환한다. |
.size() | Map에 저장된 키-값 쌍의 개수를 반환한다. |
.clear() | Map에 저장된 모든 것을 삭제한다. |
.getOrDefault(key, default value) | 키에 대응하는 값을 반환하고 키가 존재하지 않으면 default value를 반환한다. |
.putIfAbsent(key, value) | 키에 대응하는 값이 없으면 키-값을 저장한다. |
.replaceAll(함수) | Map의 모든 키-값 쌍에 대해 지정된 함수를 적용하여 값을 대체한다. |
.replace(key, value) | Map에 지정된 key가 있으면 그에 대응하는 값을 대체한다. |
package com.example;
import java.util.HashMap;
import java.util.Map;
public class Example01{
public static void main(String[] args) {
Map<Integer, String> map1 = new HashMap<>();
map1.put(1, "사과");
map1.put(2, "포도");
map1.put(3, "배");
//키 3에 해당하는 값 반환
System.out.println(map1.get(3)); // 배
//키 2와 그에 해당하는 값 삭제
map1.remove(2);
System.out.println(map1); // {1=사과, 3=배}
//키 2가 존재하는지 확인
System.out.println(map1.containsKey(2)); // false - key 2를 삭제했기 때문에 false
//값 "배"가 존재하는지 확인
System.out.println(map1.containsValue("배")); // true
//map의 크기
System.out.println(map1.size()); // 2
//키 2가 존재하면, 해당하는 값을 반환 아닐 시에 "default 값"을 반환함
System.out.println(map1.getOrDefault(2, "default 값")); // "default 값"
//키 2가 없으면, "수박" 값을 추가
map1.putIfAbsent(2, "수박");
System.out.println(map1); // {1=사과, 2=수박, 3=배}
//모든 값에 "은/는 맛있다."를 붙이는 함수
map1.replaceAll((key, value) -> value + "은/는 맛있다.");
System.out.println(map1);
// {1=사과은/는 맛있다., 2=수박은/는 맛있다., 3=배은/는 맛있다.}
//키 3을 "딸기은/는 맛있다."로 교체
map1.replace(3, "딸기은/는 맛있다.");
System.out.println(map1);
// {1=사과은/는 맛있다., 2=수박은/는 맛있다., 3=딸기은/는 맛있다.}
}
}
키와 값 순회
Map의 키나 값을 Set과 List의 형태로 변환해야 순회(iteration) 등의 다양한 반복 및 처리 작업을 수행할 수 있다. 따라서 keySet(), values(), entrySet() 메서드를 사용하여 키나 값을 불러온 후, 이를 Set이나 List로 변환하여 사용한다. 아래 예시는 List로 변환하여 사용했다.
package com.example;
import java.util.*;
public class Example01 {
public static void main(String[] args) {
Map<Integer, String> map1 = new HashMap<>();
map1.put(1, "사과");
map1.put(2, "포도");
map1.put(3, "배");
// 키를 List로 변환
List<Integer> keyList = new ArrayList<>(map1.keySet());
System.out.println("키: " + keyList); // 키: [1, 2, 3]
// 값을 List로 변환
List<String> valueList = new ArrayList<>(map1.values());
System.out.println("값: " + valueList); // 값: [사과, 포도, 배]
// 키-값 쌍을 List로 변환
List<Map.Entry<Integer, String>> entryList = new ArrayList<>(map1.entrySet());
System.out.println("키-값 쌍: " + entryList);
// 키-값 쌍: [1=사과, 2=포도, 3=배]
//Iterator을 사용해서 순회
Iterator<Map.Entry<Integer, String>> entryIterator = map1.entrySet().iterator();
while(entryIterator.hasNext()){
Map.Entry<Integer, String> element = entryIterator.next();
System.out.println("키 : " + element.getKey() + ", 값 : " + element.getValue());
// 키 : 1, 값 : 사과
// 키 : 2, 값 : 포도
// 키 : 3, 값 : 배
}
}
}
'Backend > Java' 카테고리의 다른 글
Java 기초 문법 : 컬렉션(collection) - Set (2) (0) | 2024.10.10 |
---|---|
Java 기초 문법 : 컬렉션(collection) - List (1) (0) | 2024.10.10 |
Java 기초 문법 : 제네릭(generic) (0) | 2024.10.08 |
JAVA : 레코드(Record)에 대해서 (0) | 2024.10.07 |
Java 기초 문법 : JVM 메모리구조 (0) | 2024.10.07 |
Java 기초 문법 : 인터페이스(interface) (1) | 2024.06.19 |
Java 기초 문법 : 다형성(polymorphism) (0) | 2024.06.13 |
Java 기초 문법 : 제어자(modifier) (1) | 2024.06.13 |