[Java]Map의 Value로 Set/List 넣기

LeeYulhee·2023년 8월 28일
1

👉 Map의 Value로 Set 넣기


import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class MapWithSetValue {
    public static void main(String[] args) {
        // Map 선언
        Map<String, Set<Integer>> map = new HashMap<>();

        // 키 'a'에 대한 Set 추가
        map.put("a", new HashSet<>());
        
        // 키 'a'의 Set에 값 추가
        map.get("a").add(1);
        map.get("a").add(2);
        map.get("a").add(3);

        System.out.println(map); // 출력: {a=[1, 2, 3]}
    }
}
  • Map<K, Set> 형태로 선언
  • put으로 Set 객체 생성해서 넣기
  • get으로 Set을 가져와서 add로 값 넣기



👉 존재하지 않는 키에 대해 값을 추가할 때


  • computeIfAbsent 메서드 사용
    map.computeIfAbsent("b", k -> new HashSet<>()).add(4);
    • computeIfAbsent
      • 주어진 키에 대한 값이 맵에 존재하지 않을 경우에만, 제공된 함수를 사용하여 새 값을 계산하고 맵에 추가
      • 반환 값 : 키에 연관된 현재 값 또는 계산된 값
        • 이미 키에 대한 값이 맵에 존재하는 경우, 이 메서드는 기존 값을 반환
      • 맵에 값을 추가하거나 수정할 때 유용하며, 특히 중첩된 자료 구조 (예: Map의 값으로 List 또는 Set 등을 사용할 때)에서 매우 편리
      • 기본 형태
        V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
      • 예시
        Map<String, List<String>> map = new HashMap<>();
        
        map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("apple");
        map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("banana");
        
        System.out.println(map); // 출력: {fruits=[apple, banana]}
  • getOrDefault 메서드 사용
    map.put(k, map.getOrDefault(k, new HashSet<>()));
    • getOrDefault
      • 해당 Key 에 대한 값을 가져오고, 없으면 Default로 설정한 인수를 return
    • put 메서드로 key와 getOrDefault의 return 값을 value로 넣음


👉 Map의 Value로 List 넣기


  • 기본 구현

       import java.util.ArrayList;
        import java.util.HashMap;
        import java.util.List;
        import java.util.Map;
    
        public class MapWithListValue {
            public static void main(String[] args) {
                // Map 선언
                Map<String, List<String>> map = new HashMap<>();
    
                // 키 'fruits'에 대한 List 추가
                map.put("fruits", new ArrayList<>());
    
                // 키 'fruits'의 List에 값 추가
                map.get("fruits").add("apple");
                map.get("fruits").add("banana");
    
                System.out.println(map); // 출력: {fruits=[apple, banana]}
            }
        }

  • computeIfAbsent를 사용하여 더 간결하게 구현
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class MapWithListValue {
        public static void main(String[] args) {
            Map<String, List<String>> map = new HashMap<>();
    
            // computeIfAbsent를 사용하여 더 간결하게 값을 추가
            map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("apple");
            map.computeIfAbsent("fruits", k -> new ArrayList<>()).add("banana");
    
            System.out.println(map); // 출력: {fruits=[apple, banana]}
        }
    }
    • computeIfAbsent 메서드를 사용하면, 키가 존재하지 않을 때만 새로운 ArrayList를 생성하므로 코드가 더 간결해지고 중복을 피할 수 있음
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글