在 Java 中對集合進行排序
Hiten Kanwar
2023年10月12日
在 Java 中,集合或 HashSet
通常用於隨機訪問元素,因為使用雜湊碼訪問雜湊表元素。雜湊碼是幫助我們識別雜湊表元素的唯一標識。
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
在 Java 中使用 TreeSet
顯示排序集
Collections
介面的 TreeSet
類為我們提供了樹資料結構的功能。當我們遍歷這個集合時,我們可以將 HashSet
轉換為 TreeSet
。元素以明確定義的順序提取。
TreeSet
實現了 NavigableSet
介面,它擴充套件了 SortedSet
,進一步擴充套件了 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]
在 Java 中使用 stream()
函式顯示排序集
使用 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