Java でセットを並べ替える

Hiten Kanwar 2023年10月12日
  1. Java でリストを使用してソートされたセットを表示する
  2. Java で TreeSet を使用してソートされたセットを表示する
  3. Java で stream() 関数を使用してソートされたセットを表示する
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 

Java で TreeSet を使用してソートされたセットを表示する

Collections インターフェースの TreeSet クラスは、ツリーデータ構造の機能を提供します。このコレクションを反復処理すると、HashSetTreeSet に変換できます。要素は明確に定義された順序で抽出されます。

TreeSetSortedSet を拡張する 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]

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