ホームページ >Java >&#&チュートリアル >Java 比較ツールと比較可能なガイド (例付き)

Java 比較ツールと比較可能なガイド (例付き)

Susan Sarandon
Susan Sarandonオリジナル
2025-01-10 12:29:42193ブラウズ

Java Comparator vs Comparable Guide with Example

あなたは Java プログラマーで、タスクは並べ替えであると想像してください。 Java には、窮地を救ってくれる 2 つのスーパーヒーローが用意されているので、幸運です。ComparableComparator。しかし、ちょっと待ってください、この 2 人のヒーローはあまり仲良くありません。むしろ敵同士のようなものです。それで、仕分け悪役が攻撃してきたとき、どれを呼ぶべきですか?分解してみましょう。

匹敵するもの:ライオンウルフ

Comparable インターフェースをご紹介します。 常に自分のやり方で物事を進めることを主張するヒーローのようなものです。 Comparable を実装すると、「自分を分類する方法がわかった」と言っていることになります。はい、Comparable を実装するオブジェクトには独自の組み込みの並べ替えルールがあり、それは個人用の 並べ替え GPS を持つようなものです。取引内容は次のとおりです:

  • ワントリックポニー: 並べ替える方法は 1 つだけです。たとえば、あなたが Person クラスで、年齢で並べ替えることに決めた場合、コードを変更しない限り、そのままになります。それはみんなに「ごめんなさい、私は今『年齢順』の人です」と言っているようなものです。対処してください!」
  • 自然な順序: CompareTo() メソッドをオーバーライドすることで、自然な順序 を定義します。それは、「これが私のデフォルトの並べ替えモードです。」と言っているようなものです。気に入るか、それとも残念か、どちらかでしょう!」

コーディング例が 1 つ必要ですか?

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    *// Implement compareTo*
    public int compareTo(Person other) {
        return        Integer.compare(this.age, other.age);
}

? 長所:

  • シンプル。クラスにcompareTo()を実行するだけで完了です。
  • デフォルトの並べ替え方法があり、特別なことは必要ない場合に最適です。

短所:

  • 頑固!取得できる並べ替え動作は 1 つだけです。別の項目 (名前など) で並べ替えたいですか?残念です!

比較対象: 柔軟なサイドキック ?

次に Comparator を入力します。これは柔軟性を重視した、クールでのんびりとした相棒です。 Comparable が一匹狼なら、Comparator はカメレオンです。それは仕分け用のスイスアーミーナイフのようなものです。デフォルトの順序が気に入らない場合は、問題ありません。Comparator を使用すると、クラス自体を変更せずに好きなように並べ替えることができます!

  • 複数の並べ替えオプション: 年齢、名前、身長など、さまざまな並べ替えルールに合わせてさまざまなコンパレーターを作成できます。状況に応じて変身できる相棒がいるようなものです。今日は名前順に並べ替えますか?終わり!明日は身長順に並べ替えたいですか?簡単、簡単!
public class Person {
    private String name;
    private int age;

    *// Comparator for sorting by name*
    public static Comparator<Person> nameComparator = new Comparator<Person>() {
        public int compare(Person p1, Person p2) {
            return p1.name.compareTo(p2.name);
        }
    };

    *// Comparator for sorting by age*
    public static Comparator<Person> ageComparator = new Comparator<Person>() {
        public int compare(Person p1, Person p2) {
            return Integer.compare(p1.age, p2.age);
   }
  };
}

? 長所:

  • 非常に柔軟です。必要なだけさまざまな並べ替え戦略を作成します。年齢、名前、身長など、ボートに浮かぶものごとに並べ替えてください!

  • 元のクラスをいじる必要はありません。ソースには触れずに、まったく異なる方法でオブジェクトを並べ替えたいですか? Comparator があなたをサポートします。

短所:

  • Comparable よりも少し冗長です。新しい並べ替えルールごとに個別のコンパレータを作成する必要があります。

対決: 比較者と比較者

この 2 人が直接対決でどのように積み重なるか見てみましょう:

機能 比較可能 ? コンパレータ ?

  • 並べ替えアプローチ オブジェクト自体が並べ替えられます (1 つの方法のみ) 並べ替えのための個別のルール (多くの方法) **実装場所 クラス自体の内部 クラスの外部 (多くの場合、別のコンパレーター内)。
  • 柔軟性 1 つの並べ替え方法 無制限の並べ替え方法
  • 使いやすさ 単一の並べ替えルールの方がシンプル 複雑/複数の並べ替えに優れています。
  • 既存のクラスを変更しますか? はい、クラス自体を変更します。いいえ、クラスは変更しません

それで、誰が勝ちますか? ?

ネクタイだよ! ?

  • 明確で自然な並べ替え方法を持つオブジェクトを扱っていて、その 1 つの並べ替え方法だけで十分である場合は、Comparable が頼りになります。これは黒の T シャツのような古典的な選択であり、うまくいきます。

  • ただし、並べ替えのニーズがもう少し複雑な場合 (複数の並べ替えルールを操作している場合)、または元のクラス コードをいじりたくない場合は、Comparator が柔軟でスタイリッシュな相棒になります。ネオンサングラスをかけているようなものです。オプションが増えれば、さらに楽しくなります!

最終的な考え?

これで完成です! Comparable はデフォルトのオールインワン並べ替えソリューションですが、Comparator は状況が少し不安定になったときに呼び出す、適応性のある多目的ヘルパーです。それぞれに長所と短所があるため、仕分けヒーローを選択する前に、目の前のタスクについて考えてください。

どちらを選択しても、Java でのソートはかつてないほどクールです。 ?

以上がJava 比較ツールと比較可能なガイド (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。