Java에서 집합 정렬
Java에서 해시 테이블 요소는 해시 코드를 사용하여 액세스하므로 세트 또는 HashSet
은 일반적으로 요소에 무작위로 액세스하는 데 사용됩니다. 해시 코드는 해시 테이블의 요소를 식별하는 데 도움이 되는 고유한 ID입니다.
HashSet
은 정렬되지 않은 컬렉션입니다. Java의 집합에는 정렬 알고리즘의 필수 요구 사항인 임의 액세스 메서드(예: get(i)
, 여기서 i는 해당 요소의 인덱스)가 없습니다. 간단히 말해서 HashSet
은 요소를 무작위로 배치하므로 정의되지 않은 순서로 인해 요소의 순서를 보장하지 않습니다.
따라서 Java에서 집합을 정렬하려면 상자에서 조금 벗어나 생각해야 합니다. 우리는 그것을 다른 구조로 변환하고 정렬하는 몇 가지 방법에 대해 논의할 것입니다.
목록을 사용하여 Java에서 정렬된 집합 표시
HashSet
을 정렬하는 방법은 먼저 목록으로 변환한 다음 정렬하는 것입니다.
집합의 요소를 목록에 추가한 다음 sort()
함수를 사용하여 정렬합니다.
예를 들어,
import java.util.*;
public class example {
public static void main(String[] args) {
HashSet<Integer> number = new HashSet<>();
// Using add() method
number.add(3);
number.add(6);
number.add(4);
// converting HashSet to arraylist
ArrayList<Integer> al = new ArrayList<>(number);
// sorting the list and then printing
Collections.sort(al);
System.out.println("Sorted list: ");
for (int x : al) {
System.out.print(x + " ");
}
}
}
출력:
Sorted list:
3 4 6
TreeSet
를 사용하여 Java에서 정렬된 세트 표시
Collections
인터페이스의 TreeSet
클래스는 트리 데이터 구조의 기능을 제공합니다. 이 컬렉션을 반복할 때 HashSet
을 TreeSet
으로 변환할 수 있습니다. 요소는 잘 정의된 순서로 추출됩니다.
TreeSet
은 SortedSet
을 확장하는 NavigableSet
인터페이스를 구현하며, 이는 Set
인터페이스를 더욱 확장합니다.
다음 예를 참조하십시오.
import java.util.*;
public class example {
public static void main(String[] args) {
HashSet<Integer> number = new HashSet<>();
// Using add() method
number.add(3);
number.add(6);
number.add(4);
// TreeSet gets the value of hashSet
TreeSet myTreeSet = new TreeSet();
myTreeSet.addAll(number);
System.out.println(myTreeSet);
}
}
출력:
[3, 4, 6]
stream()
함수를 사용하여 Java에서 정렬된 집합 표시
stream()
메소드를 사용하여 이 문제에 대한 간결한 방법이 있습니다. 스트림 API는 Java 8에서 도입되었으며 그 자체로 데이터 구조가 아닙니다. 그러나 다른 컬렉션에서 개체를 가져와 파이프라인 메서드에 따라 원하는 방식으로 표시할 수 있습니다.
이 예제에서는 sorted()
메서드를 사용하여 최종 시퀀스를 정렬된 방식으로 표시합니다.
아래 코드를 참조하십시오.
import java.util.*;
public class example {
public static void main(String[] args) {
// creating hashset hs
HashSet<Integer> hs = new HashSet<>();
// Using add() method to add elements to hs
hs.add(20);
hs.add(4);
hs.add(15);
// before sorting hs
hs.forEach(System.out::println);
System.out.println(); // extra line
// after sorting hs
hs.stream().sorted().forEach(System.out::println); // yes
}
}
출력:
20
4
15
4
15
20