HashSet 정렬
1. HashSet 클래스
HashSet 클래스 정렬 방법을 소개하기 전에 HashSet 클래스에 대해 간단하게 알아보자.\
- HashSet 클래스는 AbstractSet 클래스를 확장하고 Set 인터페이스를 구현한 클래스이다.
- 중복 값이 저장되지 않는다.
- 삽입 순서가 보장되지 않는다.
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이 아닌 다른 타입이라는 문제가 있다.
방법 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);
}
}
방법 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);
}
}
방법 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);
}
}