在 Java 中對 HashSet 進行排序
一、概述
HashSet是java.util包中的集合類。該類繼承於AbstractSet類,實現了Set接口。此外, HashSet不保留元素的順序,因此需要找到對這些元素進行排序的方法。
在本快速教程中,我們將學習多種技術來對HashSet的元素進行排序。
2. 使用Collections.sort()方法
Collections.sort()方法對實現java.util.List接口的對象集合進行排序。因此,我們可以將HashSet轉換為List ,然後使用Collections.sort()對其進行排序:
HashSet<Integer> numberHashSet = new HashSet<>();
numberHashSet.add(2);
numberHashSet.add(1);
numberHashSet.add(4);
numberHashSet.add(3);
// converting HashSet to arraylist
ArrayList arrayList = new ArrayList(numberHashSet);
// sorting the list
Collections.sort(arrayList);
assertThat(arrayList).containsExactly(1, 2, 3, 4);
在上面的示例中,我們首先將HashSet的元素複製到ArrayList中。然後,我們使用ArrayList作為Collections.sort()方法的參數。除了ArrayList ,我們還可以使用LinkedList或Vector 。
3. 使用TreeSet
使用這種方法,我們將HashSet轉換為TreeSet ,它與HashSet類似,只是它按升序存儲元素。因此,當HashSet轉換為TreeSet時, HashSet元素會按順序排列:
HashSet<Integer> numberHashSet = new HashSet<>();
numberHashSet.add(2);
numberHashSet.add(1);
numberHashSet.add(4);
numberHashSet.add(3);
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.addAll(numberHashSet);
assertThat(treeSet).containsExactly(1, 2, 3, 4);
我們可以看到,使用TreeSet對HashSet進行排序非常簡單。我們只需要使用HashSet列表作為參數創建TreeSet的實例。
4. 使用stream().sorted()方法
有一種簡潔的方法可以使用 Stream API 的stream().sorted()方法對HashSet進行排序。這個在 Java 8 中引入的 API 允許我們對一組元素執行函數操作。此外,它可以從不同的集合中獲取對象並以所需的方式顯示它們,具體取決於我們使用的管道方法。
在我們的示例中,我們將使用**stream().sorted()方法,該方法返回一個Stream ,其元素按特定順序排序**。需要注意的是,由於原來的HashSet沒有被修改,所以我們需要將排序的結果保存在一個新的Collection中。我們將使用collect()方法將數據存儲回新的HashSet中:
HashSet<Integer> numberHashSet = new HashSet<>();
numberHashSet.add(200);
numberHashSet.add(100);
numberHashSet.add(400);
numberHashSet.add(300);
HashSet<Integer> sortedHashSet = numberHashSet.stream()
.sorted()
.collect(Collectors.toCollection(LinkedHashSet::new));
assertThat(sortedHashSet).containsExactly(100, 200, 300, 400);
我們應該注意,當我們使用stream()時。沒有參數的sorted()方法,它按自然順序對HashSet進行排序.我們還可以用比較器重載它來定義自定義排序順序。
5.結論
在本文中,我們討論瞭如何使用三種方式在 Java 中對HashSet進行排序:使用Collections.sort()方法、使用TreeSet和使用stream().sorted()方法。
與往常一樣,代碼片段可在 GitHub 上獲得。