이번에 새롭게 재미있는 자료구조를 배웠다.
바로 MultiValueMap이다.
MultiValueMap을 알기전에 기존에 있던 Map과 무엇이 다른지 한번 비교를해보자.
Map은 크게 3가지
1. HashMap
2. TreeMap
3. LinkedHashMap
HashMap
Map의 기본형식이다. 키:밸류 인 한쌍으로 데이터를 저장하며
중복된 키가 존재하지않는다.
Map에있는 데이터를(밸류값) 뽑을때, 키를 기준으로 가져온다.
마치 키를 리스트나 배열에존재하는 idx(인덱스)처럼 가져와 밸류를 뽑기때문에
시간복잡도가 O(1)이다.
TreeMap
HashMap과 동일한 기능에 추가 옵션이들어간다.
TreeMap은 데이터가 들어올때마다 Key값에따라 알아서 자동으로 정렬이된다.
LinkedHashMap
HashMap과 동일한 기능에 역시 추가 옵션이 들어간다.
LinkedHashMap은 입력순서를 보장한다.
예를들어 HashMap엔 입력이 C B A 로햇다면, 나중에 맵에있는 모든값을 출력할때 그대로 C B A로 나오는 보장이없다.
LinkedHashMap은 이와같은 문제를 해결해준다.
-------------------------------------------------------------------------------------------------------
이제 본문으로 들어가보자
MultiValueMap
이 MultiValueMap은 키의 중복이 허용된다.
키의 중복이 어떻게 허용이 되는지는 코드로 보는것이 더 이해가 빠를것이다.
멀티밸류맵에다가 같은키 "A"를 3번 다른값 3개를 넣어줫다.
MultiValueMap은 키를 가져올때 리스트형태로 반환하여 같은 키"A"를 받은 밸류들을 저장해둔다.
Map의 경우 키를 가져오면 밸류의 타입으로 반환하지만, MultiValueMap은 다른형태다.
이걸 만약에 HashMap에다가 똑같은걸 해보면 어떻게될까?
이것역시 같은키 "A"와 다른 값 3개를 넣었다.
처음에 HashMap의 특징을 설명했듯이 중복을 허용하지않는다.
따라서 출력결과처럼 "A"가 중복으로오면 덮어쓰기를 해버린다.
즉, 제일 최근값에저장된 480이 나온다.
물론, HashMap도 약간 튜닝을하면 중복을 허용해서 넣을수 있는방법이있다.
그렇다. 아예 밸류값을 리스트형태로 잡아버리면 된다.
하지만 MultiValueMap과 비교할때 조금 귀찮은 부분이있다.
파라미터의 밸류부분을 리스트로 한번더 감싼형태라서 직관성이 떨어진다.
또한, 값을 넣을때 매번 리스트를 새로 생성해서 값을 집어넣어야한다. (귀찮음)
앞에 설계했던 MultiValueMap과 번갈아보면서 비교해봐라.
누가봐도 MultiValueMap이 더 깔끔하고 직관성이 좋다.
MultiValueMap.. 언제쓸까?
1. Map을 사용하고싶을때 (시간복잡도)
2. 중복된키로 들어오는 Value값들을 온전하게 저장하고싶을때
3. HashMap으로 쓰는것보다 깔끔한 코딩을 원할때
'자바 > API' 카테고리의 다른 글
자바 API: 문자열(String) 메소드 (0) | 2021.10.06 |
---|---|
자바 API : 큐(Queue) ,Deque사용법 (0) | 2021.10.04 |
자바 API : 스택(Stack) 사용법 (0) | 2021.10.04 |