어제 오늘 내일

[Java HashSet] 정렬 방법과 활용 예제 본문

IT/Java

[Java HashSet] 정렬 방법과 활용 예제

hi.anna 2025. 10. 10. 00:39

HashSet은 내부적으로 순서를 보장하지 않는 해시 구조라 정렬 기능이 없습니다.

하지만 정렬된 형태로 데이터를 다루고 싶다면 몇 가지 방법을 사용할 수 있습니다.
 

1. List로 변환 후 Collections.sort()

import java.util.*;

public class HashSetSortList {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>(Arrays.asList("banana", "apple", "cherry"));

        // List로 변환
        List<String> list = new ArrayList<>(set);

        // 정렬
        Collections.sort(list);
        System.out.println(list); // [apple, banana, cherry]
    }
}

HashSet → List 변환 후 정렬하는 가장 일반적인 방법입니다.
 

2. List로 변환 후 Stream sorted() (Java 8+)

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

public class HashSetSortStream {
    public static void main(String[] args) {
        HashSet<Integer> set = new HashSet<>(Arrays.asList(5, 1, 3, 2, 4));

        List<Integer> sorted = set.stream()
                                  .sorted()
                                  .collect(Collectors.toList());

        System.out.println(sorted); // [1, 2, 3, 4, 5]
    }
}

스트림 API를 이용하면 더 간결하게 정렬할 수 있습니다.
 

3. TreeSet으로 변환

import java.util.*;

public class HashSetSortTreeSet {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>(Arrays.asList("dog", "cat", "bird"));

        TreeSet<String> treeSet = new TreeSet<>(set);

        System.out.println(treeSet); // [bird, cat, dog]
    }
}

TreeSet은 자동 정렬을 지원하므로 HashSet을 TreeSet으로 변환하면 정렬된 상태를 유지할 수 있습니다.

 

4. TreeSet + 사용자 정의 Comparator

import java.util.*;

public class HashSetSortCustom {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>(Arrays.asList("kim", "lee", "park"));

        // 문자열 길이 기준 정렬
        TreeSet<String> sorted = new TreeSet<>(Comparator.comparingInt(String::length));
        sorted.addAll(set);

        System.out.println(sorted); // [lee, kim, park]
    }
}

TreeSet 생성 시 Comparator를 지정하면 원하는 기준으로 정렬할 수 있습니다.

 

결론

  • 간단히 한 번 정렬 → List 변환 + Collections.sort()
  • Java 8 이상 → Stream API 활용
  • 정렬 상태 유지 → TreeSet 변환
  • 커스텀 정렬 → TreeSet + Comparator

 

반응형
Comments