1 분 소요

1. HashSet 클래스

HashSet 클래스 정렬 방법을 소개하기 전에 HashSet 클래스에 대해 간단하게 알아보자.\

  1. HashSet 클래스는 AbstractSet 클래스를 확장하고 Set 인터페이스를 구현한 클래스이다.
  2. 중복 값이 저장되지 않는다.
  3. 삽입 순서가 보장되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
public class Main{
    public static void main(String[] args){
        HashSet<String> hashSet = new HashSet<String>();

        hashSet.add("Hello");
        hashSet.add("Java");
        hashSet.add("Programming");

        System.out.println(hSet);
    }
}

실행결과
hashset

HashSet의 요소가 삽입 순서를 보장하지 않는다는 것은 정렬이 불가능하다는 의미이다.

아래에서 소개하는 방법을 사용하면 간접적으로 정렬할 수 있지만, 정렬된 결과가 HashSet이 아닌 다른 타입이라는 문제가 있다.

방법 1. List로 변환 후 정렬

HashSet을 List로 변환 후 Collections.sort() 메서드를 사용하여 오름차순으로 정렬한다. 정렬된 결과는 List타입이다.

다음 예제는 HashSet을 List로 변환 후 오름차순으로 정렬하는 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Main{
    public static void main(String[] args){
        HashSet<String> hashSet = new HashSet<>();

        hashSet.add("Hello");
        hashSet.add("Java");
        hashSet.add("Programming");

        System.out.println("HashSet: " + hashSet);
        
        List<String> list = new ArrayList<>(hashSet);
        Collections.sort(list);

        System.out.println("List: " + list);
    }
}

hashset1

방법 2. TreeSet으로 변환

HashSet을 TreeSet으로 변환하면 자동으로 정렬된다.

다음 예제는 HashSet을 TreeSet으로 변환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {
  public static void main(String args[]) {
    HashSet<String> hashSet = new HashSet<String>();

    hashSet.add("Hello");
    hashSet.add("Java");
    hashSet.add("Programming");

    System.out.println("HashSet: " + hashSet);
    
    TreeSet<String> treeSet = new TreeSet<String>(hashSet);

    System.out.println("treeSet: " + treeSet);
  }
}

hashset2

방법 3. Stream API

Java8 이상인 경우 Stream API의 collect() 메서드를 사용하여 HashSet을 정렬할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
    public static void main(String args[]) {
        HashSet<String> hashSet = new HashSet<String>();

        hashSet.add("Hello");
        hashSet.add("Java");
        hashSet.add("Programming");

        System.out.println("HashSet: " + hashSet);

        TreeSet<String> treeSet = hashSet.stream()
                .collect(Collectors.toCollection(TreeSet::new));

        System.out.println("treeSet: " + treeSet);
    }
}

hashset2

Ref.

카테고리:

업데이트: