반응형
MultiValueMap 살펴보기 전에 Map에 대해 간단히 살펴보자.
Map 의 종류
- HashMap
- TreeMap
- LinkedHashMap
HashMap
Map의 기본 형식으로, key : value 를 한 쌍으로 데이터를 저장하며 중복된 키가 존재하지 않는다.
Map에 있는 데이터는 키 값을 기준으로 가져온다.
TreeMap
HashMap 기능 + 자동 정렬
TreeMap은 데이터가 들어올 때마다 key 값에 따라 자동 정렬된다.
LinkedHashMap
HashMap 기능 + 입력 순서 보장
HashMap에 데이터를 C - B - A 순서로 했다면, 나중에 맵에 있는 모든 값을 출력할 때 C - B - A 순으로 출력된다는 보장이 없다.
하지만, LinkedHashMap은 이 문제를 해결해준다.
MultiValueMap
이는 키의 중복이 허용된다.
MultiValueMap<String, Integer> mvMap = new LinkedMultiValueMap<>();
mvMap.add("A", 100);
mvMap.add("A", 200);
mvMap.add("A", 300);
List<Integer> a = mvMap.get("A");
for(int data : a) {
System.out.print(data + " "); // output : 100 200 300
}
위와 같이 A 키의 데이터를 가져올 때 리스트 형태로 반환한다.
Map<String, Integer> map = new HashMap<>();
map.add("A", 100);
map.add("A", 200);
map.add("A", 300);
Integer a = map.get("A");
System.out.print(a + " "); // output : 300
같은 로직을 HashMap에 적용하면, HashMap은 중복을 허용하지 않기 때문에 동일한 키 값에 대해 덮어쓰기를 해버린다.
물론, HashMap으로 방법이 아예 없는 것은 아니다.
Map의 Value Type을 List 형태로 잡아버리면 된다. 이는 값을 넣을 때 리스트를 새로 생성해 값을 집어 넣어야 하며, 파라미터 Value 값을 리스트로 감싼 형태로 직관성이 떨어져 MultiValueMap 에 비해 깔끔하지 않다.
Map<String, List<Integer>> listMap = new HashMap<>();
List<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
listMap.put("A", list);
Map을 사용하고 싶은데, 중복된 키로 여러 Value 값을 온전히 저장하고 싶을 때 사용하면 좋다.
728x90
반응형
'JVM > Java' 카테고리의 다른 글
[Java] 객체 매핑 라이브러리 ModelMapper 살펴보자 (0) | 2022.08.17 |
---|---|
[Java] Java Stream 활용하여 두 개의 List 객체 비교하기 (0) | 2022.08.16 |
[Java] Comparator, Lamda 사용하여 2차원 배열 정렬하기 (0) | 2022.06.08 |
[Java] Arrays.sort 와 Collections.sort 정리 (0) | 2022.06.06 |
[Java] StringTokenizer Class 사용 및 Split 비교 (0) | 2022.05.28 |
댓글