この記事では、ArrayListのJavaカスタムソートの2つの実装方法について説明します。次のように、参照のために共有してください。
Javaでリストのカスタムソートを実装すると、主に2つの方法が使用されます
1)ソートする必要があるオブジェクトのクラスを、比較可能なインターフェイスを実装し、比較(to)メソッドをオーバーライドし、その中のソートルールを定義します。次に、collections.sort()を直接呼び出してオブジェクト配列をソートできます
パブリッククラスの学生は同等の{private int id;プライベートインクエイジ;プライベートINT高さ;プライベート文字列名;パブリック学生(int id、string name、int age、int height){this.id = id; this.name = name; this.age = age; this.height = height; } public int getId(){return id; } public int getage(){return age; } public int getheight(){return height; } public string getname(){return name; } public void setid(int id){this.id = id; } public void Setage(int age){this.age = age; } public void setName(string name){this.name = name; } public void setheight(int height){this.height = height; } @override public int compareto(object o){sudent s =(desute)o; if(this.age> s.age){return 1; } else if(this.age <s.age){return -1; } else {if(this.height> = s.height){return 1; } else {return -1; }}}}テストクラス:
Java.util。*; public class test {public static void printdata(list <sudtent> list){for(student student:list){system.out.println( "sustent number:" + student.getid() + "name:" + sudints.getname() + "age" + sustent.getage() + "height:" + genteight(); }} public static void main(string [] args){list <Student> list = new ArrayList <>(); list.add(新しい学生(1、 "a"、20、180)); list.add(新しい学生(2、 "B"、21、175)); list.add(新しい学生(3、 "c"、22、190)); list.add(新しい学生(4、 "d"、21、170)); list.add(新しい学生(5、 "e"、20、185)); system.out.println( "sorted"前 "); printData(リスト); collections.sort(list); system.out.println( "年齢と高さのソート"); printData(リスト); }}結果:
並べ替え前の学生番号:1名:A歳:180学生番号:2名:B年齢21高さ:175学生番号:3年齢22高さ:190学生番号:4学生番号:4年齢21名:5年齢20高さ:185年齢と身長並べ替えられた学生番号:1名:1 180年齢:185年齢:170年齢:2 21歳:2名前:b年齢21高さ:175学生番号:3名前:c年齢22高さ:190
2)Comparator Interface Comparatorを実装し、比較方法を書き直し、パラメーターとしてソートに渡す
パブリッククラスの学生{private int id;プライベートインクエイジ;プライベートINT高さ;プライベート文字列名;パブリック学生(int id、string name、int age、int height){this.id = id; this.name = name; this.age = age; this.height = height; } public int getId(){return id; } public int getage(){return age; } public int getheight(){return height; } public string getname(){return name; } public void setid(int id){this.id = id; } public void Setage(int age){this.age = age; } public void setName(string name){this.name = name; } public void setheight(int height){this.height = height; }}テストクラス:
Java.util。*; public class test {public static void printdata(list <sudtent> list){for(student student:list){system.out.println( "sustent number:" + student.getid() + "name:" + sudints.getname() + "age" + sustent.getage() + "height:" + genteight(); }} public static void main(string [] args){list <Student> list = new ArrayList <>(); list.add(新しい学生(1、 "a"、20、180)); list.add(新しい学生(2、 "B"、21、175)); list.add(新しい学生(3、 "c"、22、190)); list.add(新しい学生(4、 "d"、21、170)); list.add(新しい学生(5、 "e"、20、185)); system.out.println( "sorted"前 "); printData(リスト); collections.sort(list、new Comparator <Student>(){@Override public int Compare(Student o1、Student o2){if(o1.getage()> = o2.getage()){return 1;} els {return -1;}}}); system.out.println( "after age sorted"); printData(リスト); collections.sort(list、new Comparator <Student>(){@Override public int Compare(Student o1、sudent o2){if(o1.getage()> o2.getage()){return 1;} else if(o1.getage()<o2.getage()){return -1;} els {o1.getheight() } else {return -1;}}}); system.out.println( "年齢と高さのソート"); printData(リスト); }}出力結果:
並べ替え前の学生番号:1名:A年20歳高さ:180学生番号:2名:B年齢21高さ:175学生番号:3年齢22高さ:4学生番号:4年齢:D年齢高さ:5年齢20高さ:185年齢3年生:学生番号:1名:1名:180歳の学生番号:185年齢:2 b 21歳の年齢:170学生番号:3名:C 22歳の高さ:年齢と身長の190年齢分類学生番号:1名:1歳高さ:180学生番号:5年齢20高さ:e高さ:18学生番号:D年齢21高さ:2名:2年齢21高さ:175学生番号:3名:C年齢:190歳年齢:190歳
上記の例から、ソートが安定していることがわかります。 Java Collections.sortのソースコードを見ました。確かに、安定したマージの並べ替えと並べ替えに基づいて実装されています。また、TimSortと呼ばれる内部で最適化されています。 (Timsortについては、https://baike.baidu.com/item/timsort?fr=aladdinを参照してください)
PS:参照のためのデモンストレーションツールは次のとおりです。
オンラインアニメーションデモンストレーション挿入/選択/バブル/マージ/ヒル/クイックソートアルゴリズムプロセスツール:
http://tools.vevb.com/aideddesign/paixu_ys
Javaアルゴリズムの詳細については、このサイトに興味のある読者は、「Javaデータ構造とアルゴリズムのチュートリアル」、「Java操作DOMノードのヒントの要約」、「Javaファイルの要約およびディレクトリ操作のヒント」、「Java Cache操作のヒントの要約」というトピックを見ることができます。
この記事がみんなのJavaプログラミングに役立つことを願っています。