알파돈

[JAVA] HASH란? 본문

JAVA

[JAVA] HASH란?

돈글이 2025. 10. 14. 22:46

해시(Hash) 총정리

언제 해시를 사용할까?

  1. ✅ 빈도수 계산이 필요할 때
  2. ✅ 중복 제거가 필요할 때
  3. ✅ 빠른 검색(O(1))이 필요할 때
  4. ✅ 키-값 쌍으로 데이터를 관리할 때
  5. ✅ 그룹핑/분류가 필요할 때

자주 사용하는 패턴

1. 빈도수 계산

Map<String, Integer> countMap = new HashMap<>();
for (String item : items) {
    countMap.put(item, countMap.getOrDefault(item, 0) + 1);
}

2. 그룹핑

Map<String, List<T>> groupMap = new HashMap<>();
groupMap.computeIfAbsent(key, k -> new ArrayList<>()).add(value);

3. 중복 제거

Set<Integer> uniqueSet = Arrays.stream(arr).boxed().collect(Collectors.toSet());

4. Map 정렬

// Key 기준
map.entrySet().stream()
   .sorted(Map.Entry.comparingByKey())

// Value 기준
map.entrySet().stream()
   .sorted(Map.Entry.comparingByValue().reversed())

시간복잡도

  • HashMap 삽입/검색/삭제: O(1) (평균)
  • HashSet 삽입/검색/삭제: O(1) (평균)
  • TreeMap 삽입/검색/삭제: O(log n)

주의사항

  • HashMap은 순서를 보장하지 않음 (순서 필요시 LinkedHashMap)
  • 정렬이 필요하면 TreeMap 또는 Stream으로 정렬
  • null 키는 1개만 허용 (null 값은 여러 개 가능)
Comments