ちょうどJavaのを確認するための時間の最初のブログは、コンパレータ、使用するためにどのような方法でレコードを使用しています。
オブジェクトの配列をソートするために使用されるJavaコンパレータ、主に使用される同等と比較インタフェース
Comparableインタフェースを使用して1、
まず、ソート同等のオブジェクト・クラスを実装する必要がインターフェイスを実装する、実現が比較される複数のルールCOMPARATO法、最終的なコールjava.utils.Arrays.sort()着信オブジェクトのメソッドを記述するためにCOMPARATO(T他の)方法をオーバーライド配列をソートすることができます。
次のようにテストは以下のとおりです。
1 インポートjava.util.Arrays。 2 3 パブリック クラスメイン{ 4 5 パブリック 静的 ボイドメイン(文字列[]引数){ 6 7 生徒[] ARR = 新しい生徒[3 ]。 8 ARR [0] = 新しい生徒(3 )。 9 ARR [1] = 新しい学生(2 )。 10の ARR [2] = 新しい学生(1 )。 11 のために(学生A:ARR) 12 System.out.print(A +」 " )。 13 Arrays.sort(ARR)。 14 のSystem.out.println(); 15 のために(学生A:ARR) 16 System.out.print(A +」 " )。 17 } 18 } 19 20 クラスの学生は、実装同等<学生> { 21 22 INTの数と、 23 24 公衆学生(INT aNumber){ 25 この .NUMBER = aNumber。 26 } 27 28 公共 のintcompareTo(学生O){// Oオブジェクト自体と比較して、そのオブジェクトは、上面と比較され、1を返します。 29 IF(この .NUMBER> o.number){ 30 リターン 1 ; 31である } そう IF(この .NUMBER == o.number){ 32 リターン 0 ; 33であるが } そう 34が 戻り -1 ; 35 } 36 37 [ パブリック文字列のtoStringを(){ 38は 戻りString.valueOf(番号); 39 } 40 41です }
業績は次のとおりです。
3 2 1
1 2 3
注意:
比較では、あなたは、-1にオーダー、交換の順序を降順-1 1にしたい場合は交換することができます。
=======================================
図2に示すように、コンパレータを使用して、その
時には、Comparableインタフェースを実装して考慮されていませんStudentクラスの設計では、あなた自身のコンパレータクラスを記述することができます。
()することができる比較(T O1、T O2)メソッドをオーバーライドするコンパレータ<T>インターフェイスを実装するクラスを作成し、最終的には、Arrays.sortを呼び出すときに、着信アレイがソートされ、コンパレータコンパレータクラスします
次のようにテストは以下のとおりです。
1つの パッケージの練習。 2 インポートjava.util.Arrays。 3 輸入はjava.util.Comparator。 4 5 パブリック クラスメイン{ 6 7 パブリック 静的 ボイドメイン(文字列[]引数){ 8 9 学生[] ARR = 新しい生徒[3 ]。 10の ARR [0] = 新しい生徒(1,3 )。 11の ARR [1] = 新しい生徒(3,5 )。 12の ARR [2] = 新しい生徒(2,5 )。 13 用(学生A:ARR) 14 System.out.printの(A + "\ T" ); 15 は、Arrays.sort(ARR、新しい新しいStudentComparator()); //着信クラス、及び比較器アレイ 16 のSystem.out.println( ); 17。 ための(学生A:ARR) 18である System.out.print(A + "\ T"の); 19 } 20 } 21は、 22である クラスの学生{ 23である 24 のint 番号; //科学番号 25 のint スコア; //はスコア 26 27 公共の学生(int型 aNumber、int型Ascore){ 28 この .NUMBER = aNumber; 29 この .score = Ascore; 30 } 31である 32 パブリック文字列のtoString(){ 33は、 リターン番号+ "ノースコア:" + スコア; 34である } 35 36 } 37 38である クラス StudentComparator 実装コンパレータ<学生> { 39 40 公共 intは(学生O1、O2学生)を比較{//新しい比較規則の作成、以前のハイスコア、同じスコア場合は、前回の学習を大量に追加します。 41で IF(o1.score> o2.score) 42がされています 返す -1 ; 43 他の 場合(o1.score < o2.score) 44 リターン 1 。 45 他{ 46 であれば(o1.number> o2.number) 47 リターン -1 。 48 他に あれば(o1.number < o2.number) 49 リターン 1 。 50 他の 51 の戻り 0 ; 52 } 53 } 54 55 }
結果:
3 3スコア:5スコア2:5 1スコア
3スコア:スコア2:5画分1:3
上記方法はまた、異なる種類の効果を達成するために、修飾された比較ルールとして、この試験のようにすることができます。
=======================================
あなたが収集・コンパレータを渡して、第二の方法に類似のコレクションを、ソートしたい場合はCollections.sort(ST、新しいComparatorSort())を呼び出すことができるとき。