Java でセットを並べ替える
- Java でリストを使用してソートされたセットを表示する
-
Java で
TreeSet
を使用してソートされたセットを表示する -
Java で
stream()
関数を使用してソートされたセットを表示する
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
クラスは、ツリーデータ構造の機能を提供します。このコレクションを反復処理すると、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]
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