ソートする必要があるコレクションまたはアレイが単純な数値タイプではない場合、通常、コンパレータを使用したり、オブジェクトソートまたはカスタムソートを実装して簡単な方法で使用できます。
オブジェクトのいくつかのコレクションに合計注文を課す比較関数。コンパレータをソートメソッド(collections.sortまたはarrays.sortなど)に渡すことができ、ソート順序を正確に制御できます。コンパレータを使用して、特定のデータ構造(ソートされたセットやソートマップなど)の順序を制御したり、自然な順序付けがないオブジェクトのコレクションの順序付けを提供することもできます。 ------ API
文字列オブジェクトが比較可能なインターフェイスを実装するのに役立つため、文字列リストを直接並べ替えることができます。そのため、私たちの人がソートしたい場合は、コンパレータを実装する必要があります。
1。コンパレータ
LinkedListに保存されているオブジェクトをソートします
import java.util.comparator; import java.util.linkedlist; class person {private float height;プライベート文字列名;人(フロートの高さ){this.height = height; } public float getheight(){return height; } public void setheight(float height){this.height = height; } public string getname(){return name; } public void setName(string name){this.name = name; }} class personheight Implations Comparator <serson> {@override // Compare Method、return <0は変更されません。return> 0は順序で交換されます(person e1、person e2){if(e1.getheight()<e2.getheigh()<return 1; } else {return -1; }}} public class question3 {public static void main(string [] args){person p1 = new person(23.4f); p1.setName( "Stud1");人P2 =新しい人(2.34F); p2.setname( "stud2");人P3 =新しい人(34.32F); p3.setname( "stud3");人P4 =新しい人(56.45F); p4.setname( "stud4");人P5 =新しい人(21.4F); p5.setname( "stud5"); linkedlist <person> al = new linkedlist <person>(); Al.Add(P1); Al.Add(P2); Al.Add(P3); Al.Add(P4); Al.Add(P5); //ソートメソッドを呼び出してソートコレクションを実装します。 //(Person P:al)system.out.println(p.getname())の出力を送信します。 }}
添付:
//日付を並べ替え/*** O1がO2未満の場合、負の数を返します。 O1がO2よりも大きい場合は、正の数を返します。それらが等しい場合、0を返します。 */@overridepublic int Compare(ステップO1、ステップO2){日付eccepttime1 = utiltool.strodate(o1.getaccepttime()、null);日付AcceptTime2 = utiltool.Strtodate(o2.getaccepttime()、null); //日付フィールドを登ると、下降したい場合は、(accepttime1.after(accepttime2))return 1; return -1;}2。同等
import java.util.collections; Import java.util.comparator; import java.util.linkedlist; class人は比較可能{private float height;プライベート文字列名;人(フロートの高さ){this.height = height; } public float getheight(){return height; } public void setheight(float height){this.height = height; } public string getname(){return name; } public void setName(string name){this.name = name; } @Override public int compareto(object o){// todo auto-fenatedメソッドスタブif(this.height>((person)o).height){return 1; } else return -1; }} public class question3 {public static void main(string [] args){person p1 = new person(23.4f); p1.setName( "Stud1");人P2 =新しい人(2.34F); p2.setname( "stud2");人P3 =新しい人(34.32F); p3.setname( "stud3");人P4 =新しい人(56.45F); p4.setname( "stud4");人P5 =新しい人(21.4F); p5.setname( "stud5"); linkedlist <person> al = new linkedlist <person>(); Al.Add(P1); Al.Add(P2); Al.Add(P3); Al.Add(P4); Al.Add(P5); collections.sort(al); for(person p:al)system.out.println(p.getname()); }}三つ。比較
同等のクラス内で定義されます。
コンパレータは人の外で定義されます。現時点では、私たちの人クラスの構造を変更する必要はありません。
2つの方法には、独自の利点と短所があります。同等の使用は簡単です。同等のインターフェイスを実装するオブジェクトが比較可能なオブジェクトになる限り、ソースコードを変更する必要があります。コンパレータを使用する利点は、ソースコードの変更を必要とせず、コンパレータを実装することです。カスタムオブジェクトを比較する必要がある場合、コンパレータとオブジェクトを一緒に渡すことでサイズを比較できます。コンパレータでは、ユーザーは複雑で一般的なロジックを自分で実装できるため、比較的単純なオブジェクトに一致させることができます。これにより、多くの反復労働を節約できます。