Java のコンパレータ インターフェイスとは何ですか? 例を示します。
Comparator インターフェイスには、compare() メソッドとquals() メソッドが含まれています。最初のメソッドは、整数値を返すことによって 2 つのオブジェクトを計算するために使用されます。もう 1 つの方法は、2 つのコンパレータ オブジェクトが等しいかどうかを計算するために使用されます。
Java で Comparator インターフェイスを使用する方法のさまざまな例を次に示します。
例 1: 長さに基づいてリストを並べ替える
この例では、文字列のリストが考慮され、アルファベット順ではなく長さに基づいて並べ替えられます。
輸入 java.util.ArrayList ;
輸入 java.util.コレクション ;
輸入 java.util.Comparator ;
輸入 java.util.List ;
公共 クラス 主要 {
公共 静的 空所 主要 ( 弦 [ 】 引数 ) {
リスト < 弦 > リスト = 新しい 配列リスト <> ( ) ;
リスト。 追加 ( 「ジョン」 ) ;
リスト。 追加 ( 'ボブ' ) ;
リスト。 追加 ( 「アリス」 ) ;
コレクション 。 選別 ( リスト ) ;
システム 。 外 。 プリントイン ( リスト ) ;
コレクション 。 選別 ( リスト、 新しい 文字列長コンパレータ ( ) ) ;
システム 。 外 。 プリントイン ( リスト ) ;
}
} // クラスが定義されます
クラス 文字列長コンパレータ 実装する コンパレータ < 弦 > {
公共 整数 比較 ( 弦 s1、 弦 s2 ) {
戻る 整数 。 比較 ( s1. 長さ ( ) 、s2。 長さ ( ) ) ;
}
}
上記のコードの説明は次のとおりです。
- まず、Comparator
インターフェイスを実装する StringLengthComparator というカスタム Comparator クラスを作成します。 - これは、2 つの文字列の長さを比較するための Compare() メソッドをオーバーライドします。
- 最後に、カスタム コンパレータを使用してリストを並べ替えるためのインスタンスを .sort() メソッドに渡します。
出力
最初の出力は自然順序付けを使用してリストを並べ替えた結果であり、2 番目の出力は各文字列の長さに基づいてカスタム コンパレーターを使用してリストを並べ替えた結果です。
例 2: 特定のフィールドに基づいてオブジェクトを並べ替える
別の例では、特定のフィールドに基づいてオブジェクトを並べ替えます。これを実現するために Comparator インターフェイスが使用されます。
輸入 java.util.ArrayList ;輸入 java.util.コレクション ;
輸入 java.util.Comparator ;
輸入 java.util.List ;
公共 クラス 主要 {
公共 静的 空所 主要 ( 弦 [ 】 引数 ) {
リスト < 人 > 人 = 新しい 配列リスト <> ( ) ; // 名前、年齢、給与を割り当てます
人。 追加 ( 新しい 人 ( 「アリス」 、 25 、 50000 ) ) ;
人。 追加 ( 新しい 人 ( 'ボブ' 、 30 、 75000 ) ) ;
人。 追加 ( 新しい 人 ( 「チャーリー」 、 二十 、 40000 ) ) ;
コンパレータ < 人 > 給与比較 = 新しい コンパレータ < 人 > ( ) {
// 給与に基づいて人物を並べ替えます
公共 整数 比較 ( 人物 p1、人物 p2 ) {
戻る 整数 。 比較 ( p2. 給料をもらう ( ) 、p1。 給料をもらう ( ) ) ;
}
} ;
コレクション 。 選別 ( 人員、給与比較 ) ; 戻る 値を並べ替える
// ソートされた人物リストを出力します
ために ( 人 人 : 人 ) {
システム 。 外 。 プリントイン ( 人 ) ;
}
}
}
クラス 人 { // 名前、年齢、給与を定義します
プライベート 弦 名前 ; // クラス内のスコープ
プライベート 整数 年 ;
プライベート 整数 給料 ;
公共 人 ( 弦 名前、 整数 年、 整数 給料 ) {
これ 。 名前 = 名前 ;
これ 。 年 = 年 ;
これ 。 給料 = 給料 ;
}
公共 弦 getName ( ) {
戻る 名前 ;
}
公共 整数 年齢を取得する ( ) {
戻る 年 ;
}
公共 整数 給料をもらう ( ) {
戻る 給料 ;
}
公共 弦 toString ( ) {
戻る 名前 + ' (年 ' + 年 + ', 給料 $' + 給料 + ')' ;
}
}
コードの説明は以下のとおりです。
- 「」というクラス 人 ” 3 つのフィールドがあります:” 名前 ”、” 年 '、 と ' 給料 ' 考えられている。
- その後、給与に応じて Person オブジェクトのコレクションを降順に並べ替えます。
出力
出力には、給与が降順で並べ替えられたことが示されています。
結論
Java では、Comparator インターフェイスは、ユーザーがカスタム基準に基づいてオブジェクトを並べ替えることができる強力なツールです。これは、compare() メソッドをオーバーライドし、ユーザーは独自の比較関数を定義し、それを使用してオブジェクトのコレクションをさまざまな方法で並べ替えることができます。この記事では、Java での実際の例とともに Comparator インターフェイスについて説明しました。