在 Java 中對集合進行排序

Hiten Kanwar 2023年10月12日
  1. 在 Java 中使用列表顯示排序集
  2. 在 Java 中使用 TreeSet 顯示排序集
  3. 在 Java 中使用 stream() 函式顯示排序集
在 Java 中對集合進行排序

在 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

相關文章 - Java Set