728x90

map의 종류

  • HashMap
  • TreeMap
  • LinkedHashMap

HashMap 

  • Map의 기본 형태
  • key:value
  • 중복된 key 허용하지 않음
  • 데이터를 뽑을 때 Key를 기준으로 가져옴
  • 마치 Key를 인덱스처럼 가져와 value를 가져오기 때문에 시간복잡도 O(1)

 

TreeMap

  • HashMap + 추가 옵션
  • 데이터가 들어올 때마다 Key 값에 따라 자동 정렬 됨 
    • Comparator 사용

 

LinkedHashMap

  • HashMap + 추가 옵션
  • 입력순서를 보장한다.
    • 예를 들어, HashMap에 A B C 라는 순서로 입력했을 때, 맵에 있는 모든 값을 출력할때 A B C 라는 순서로 출력한다는 보장이 없다. 
    • LinkedHashMap은 이러한 입력 순서를 보장한다. 

 

MultiValueMap

Spring에서 제공하는 Data Collection

Spring 라이브러리 (Package org.springframework.util)

Key 의 중복이 허용된다.

MultiValueMap<String,Integer> map = new LinkedMultiValueMap<>();
map.add("A",123);
map.add("A",1234);
map.add("A",12345);

List<Integer> result = map.get("A");

for(int value : result){
    System.out.println(value);
}

결과

123
1234
12345

 

하나의 키에 여러 값을 저장하기 위해서는 키에 List를 저장하면 되지만, 그 형태가 복잡해질 수 있다. 

 

RestTemplate

  • application/x-www-form-urlencoded 타입으로 POST 요청을 하기 위해서는 객체를 MultiValueMap으로 전송해야 한다. 
  • exchange(), getForEntity(), postForEntity() 등 MultiValueMap 필수 사용 
  • 같은 Key를 가진 파라미터 값이 여러 개일 경우를 대비해서 !
  • 동일한 Key값을 가진 여러 파라미터가 있을 경우도 웹은 이를 정상적으로 인식할 수 있으며, 수신하는 곳에서는 name을 List로 가진 곳에 정상적으로 매핑되기 때문

 

언제 사용? 

  • Map을 사용하고 싶을 때
  • 중복된 키로 들어오는 value를 저장하고 싶을 때
  • RestTemplate

 

참고

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/MultiValueMap.html

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

https://taehoung0102.tistory.com/182

https://colinch4.github.io/2020-12-03/data_structure/

728x90
복사했습니다!