어제 오늘 내일

[Java HashMap] 초기화 방법 총정리 본문

IT/Java

[Java HashMap] 초기화 방법 총정리

hi.anna 2025. 10. 7. 01:14

HashMap은 자바에서 가장 자주 쓰이는 컬렉션 중 하나인데, 단순히 new HashMap<>()만 쓰기보다는 상황에 맞는 다양한 초기화 방법이 있습니다. 이번 글에서는 초기 데이터와 함께 HashMap을 만드는 여러 패턴을 소개합니다.

 

1. 기본 생성자

import java.util.HashMap;

public class HashMapInit1 {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();

        map.put("kim", 90);
        map.put("lee", 80);

        System.out.println(map); // {kim=90, lee=80}
    }
}

설명: 가장 일반적인 방법으로, 비어 있는 상태에서 put()으로 데이터를 추가합니다.

 

2. 초기 용량(capacity) 지정

import java.util.HashMap;

public class HashMapInit2 {
    public static void main(String[] args) {
        // 예상 데이터 개수가 많을 경우 초기 용량을 지정해 리사이즈 비용 절감
        HashMap<String, Integer> map = new HashMap<>(100);

        map.put("kim", 90);
        map.put("lee", 80);

        System.out.println(map);
    }
}

설명: 대량 데이터를 넣을 때는 초기 용량(capacity)을 지정하면 성능에 유리합니다.

 

3. 다른 Map으로부터 복사

import java.util.*;

public class HashMapInit3 {
    public static void main(String[] args) {
        Map<String, Integer> base = Map.of("kim", 90, "lee", 80);

        HashMap<String, Integer> map = new HashMap<>(base);

        System.out.println(map); // {kim=90, lee=80}
    }
}

설명: 다른 Map을 생성자로 넘기면 해당 데이터를 복사한 새 HashMap을 만들 수 있습니다.

 

4. 익명 초기화 블록 (구 Java 스타일)

import java.util.HashMap;

public class HashMapInit4 {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>() {{
            put("kim", 90);
            put("lee", 80);
        }};

        System.out.println(map); // {kim=90, lee=80}
    }
}

설명: 간단해 보이지만 내부적으로 익명 클래스가 생성되므로 메모리/성능 이슈가 있어 실무에선 권장되지 않습니다.

 

5. Java 8+ Stream 사용

import java.util.*;
import java.util.stream.*;

public class HashMapInit5 {
    public static void main(String[] args) {
        Map<String, Integer> map = Stream.of(
                new AbstractMap.SimpleEntry<>("kim", 90),
                new AbstractMap.SimpleEntry<>("lee", 80))
            .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        System.out.println(map); // {kim=90, lee=80}
    }
}

설명: 스트림을 활용하면 유연하게 데이터를 가공하여 HashMap으로 초기화할 수 있습니다.

 

6. Java 9+ Map.of() 활용

import java.util.Map;

public class HashMapInit6 {
    public static void main(String[] args) {
        Map<String, Integer> map = Map.of(
            "kim", 90,
            "lee", 80,
            "park", 95
        );

        System.out.println(map); // {kim=90, lee=80, park=95}
    }
}

설명: Map.of()불변 Map을 생성합니다. 수정이 필요하다면 new HashMap<>(Map.of(...))로 감싸 사용하세요.

 

7. Collections.singletonMap()

import java.util.*;

public class HashMapInit7 {
    public static void main(String[] args) {
        Map<String, Integer> map = Collections.singletonMap("kim", 90);

        System.out.println(map); // {kim=90}
    }
}

설명: 요소가 1개뿐인 Map을 만들 때 유용합니다. 역시 불변이므로 수정이 필요하다면 새 HashMap에 복사하세요.

 

결론

  • 가장 기본은 new HashMap<>()
  • 대량 데이터 예상 시 용량 지정
  • 고정/불변 Map은 Map.of, singletonMap
  • 동적으로 초기화할 땐 Stream + Collectors 활용 가능

 

 

반응형
Comments