HOWTO · Java
Java でリンクリストを並べ替える
この記事では、Java でリンクリストを並べ替える方法を紹介します。
このページの内容
Java のリンクリストは、ユーザーがメモリ内に動的配列を作成できるようにするデータ構造またはコレクションです。リストには、事前定義されたサイズは含まれていません。ノードを動的に作成し、値と次のノードへの参照を単一のメモリアドレスに格納します。リスト要素は値を順番に保持するか、リストは要素が挿入される挿入順序を維持します。
並べ替えは、データ構造内の要素を明確な順序で配置する方法として定義されます。配置は、要件に応じて、昇順または降順のいずれかになります。リストコレクションを並べ替えるには、さまざまな方法があることに注意してください。
以下は、配列内の要素を並べ替えるためのコードブロックです。
import java.text.Collator;
import java.util.Comparator;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("ab");
list.add("bb");
list.add("aA");
list.add("bB");
System.out.println(list);
list.sort(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return Collator.getInstance().compare(s1, s2);
}
});
System.out.println(list);
}
}
上記のコードブロックでは、リストは new キーワードを使用してインスタンス化されます。キーワードは、String データ型のリンクリストをインスタンス化し、コンストラクターを内部的に呼び出します。次に、リストインスタンスは add メソッドを呼び出してリスト内の要素を入力します。挿入順序を確認するために値が出力されます。
sort メソッドは List インターフェースにあります。この関数は、パラメーターとして指定されたコンパレーターに基づいてリストをソートします。コンパレータは、渡された要素のリストを比較するために使用されます。
考慮すべき点は、渡された値をソートし、それらが同じタイプでなければならないことを確認することです。値が同じタイプでない場合、または要素が比較できない場合、クラスは ClassCastException をスローします。
ソートの内部実装は、十分に効率的で、log n 時間で比較を行う merge sort コマンドを使用して行われます。そのため、compare メソッドをオーバーライドする new Comparator インスタンスが形成されます。実装は、メソッドをオーバーライドして実装を提供する従来の方法です。
代わりに、Java 8 ラムダ関数を使用したワンライナー実装を使用できます。このインターフェースは機能インターフェースであり、呼び出すメソッドは 1つだけです。ラムダは、インターフェースに存在するパラメーターの数を直接受け取ります。上記のコードのワンライナーJava 8 表現を以下に示します。
list.sort((o1, o2) -> Collator.getInstance().compare(o1, o2));
リスト内の要素を比較するための実際のステートメントは、collator クラスです。このクラスは本質的に抽象的であり、メソッドのプロトタイプを定義します。実装は、それらを拡張する抽象クラスに存在します。
collator クラスは、ロケールに依存する文字列を比較します。getInstance メソッドは、現在のデフォルトのロケール値でインスタンスを取得します。compare 関数は、collator に基づいて値を比較し、より大きい、小さい、または等しい値に基づいて、+1、-1、または 0 を返します。
上記のコードの出力を以下に示します。2 行目は、出力を配置された形式で表しています。キーボードの文字の ASCII シーケンスに従って、大文字は小さいアルファベット(a-z)よりも高い範囲(A-Z)にあります。したがって、2 行目の結果のリストは、大文字のアルファベットが含まれているため、最初に小さな大文字と小文字の bb を出力し、次に bB を出力します。
[ab, bb, aA, bB][aA, ab, bb, bB]