Javaにおけるcomparableとcomparatorの主な違いは、comparatorが単一の要素に基づいてコレクションをソートするのに対して、comparatorは複数の要素に基づいてコレクションをソートすることです。
Javaは高水準の汎用プログラミング言語であり、Web、デスクトップ、モバイル、高性能分散システムなど様々なアプリケーションの構築に役立っています。
さらに、Javaの大きな利点の1つは、オブジェクト指向プログラミング(OOP)をサポートしていることです。
このパラダイムでは、クラスとオブジェクトを作成することができます。
クラスは、オブジェクトを作成するためのブループリントです。
また、プロパティを記述するためのデータメンバと、動作を表すためのメソッドを持つ。
さらにJavaは、クラスのデータ・メンバを使ってオブジェクトを分類するための様々なインタフェースを提供する。
ComparableとComparatorはそのうちの2つです。
Javaにおける比較可能とは
comparableインターフェイスは、あるオブジェクトと別のオブジェクトを比較するのに役立ちます。
クラスはそのインスタンスを比較するために java.lang.Comparable インターフェースを実装しています。
まず、クラスでcomparableインターフェースを実装し、ComparableインターフェースのメソッドcompareTo()をオーバーライドすることが必要です。
図1: Studentクラス
図2:Comparableのメインプログラム
上のプログラムでは、StudentはComparableインタフェースを実装したクラスです。
Studentクラスは、id, name, marksの3つのデータメンバを持っています。
コンストラクタはデータメンバに初期値を与えるのに役立ちます。
さらに、このクラスは compareTo メソッドをオーバーライドします。
このメソッドには、Studentオブジェクトが渡されます。
したがって、このメソッドは比較に応じて1,-1または0を返します。
メインプログラムでは、alはArrayListのオブジェクトです。
プログラマは、このArrayListにStudentオブジェクトを挿入することができます。
sortメソッドは要素をソートします。
最後に、「forループ」で要素をコンソールに表示する。
コンパレータJavaとは
Comparatorインターフェイスは、リストの要素を異なる比較演算子でソートするために使用されます。
プログラム例を以下に示します。
図3:コンパレータの名前とマーク
図4: コンパレータのメインプログラム
上記のプログラムにおいて、StudentはComparableインタフェースを実装したクラスです。
また、student クラスは id, name, marks の3つのデータメンバを持っています。
コンストラクタはデータメンバに初期値を与えるのに役立つ。
MarkComparatorクラスはComparatorインターフェイスを実装しています。
そのため、2つの Student オブジェクトを受け入れる compare メソッドをオーバーライドします。
比較の結果、compareメソッドは1、-1または0を返します。
同様に、AgeComparatorというクラスもあり、これはComparatorインターフェイスを実装している。
これもcompareメソッドをオーバーライドしています。
また、このメソッドは2つのstudentオブジェクトを取得します。
さらに、compare メソッドは比較に応じた整数を返します。
メインプログラムでは、alはArrayListのオブジェクトです。
プログラマはこのArrayListに、34,35,36行目と同様にStudentオブジェクトを挿入することができます。
さらに、38行目では、名前によって要素が比較されます。
また、forループにより、画面に要素が表示されます。
43行目では、マークを基準に比較されている。
そして、次のfor loopで画面に表示される。
JavaにおけるComparableとComparatorの違い
定義
Comparableは単一のソートシーケンスを提供するユーザー定義クラスのオブジェクトを並べるために使用されるJavaのインタフェースであり、Comparatorは複数のソートシーケンスを提供するユーザー定義クラスのオブジェクトを並べるために使用されるJavaのインタフェースです。
このように、JavaにおけるComparableとComparatorの主な違いについて説明します。
ソート要素
また、ComparableはcompareTo()メソッドで要素の並べ替えを行うのに対し、Comparatorはcompare()メソッドで要素の並べ替えを行っています。
この点も、JavaにおけるComparableとComparatorの違いです。
ソートする構文
JavaにおけるComparableとComparatorのもう一つの違いは、Comparableでソートする構文はCollections.sort(List)、Comparatorでソートする構文はCollections.sort(List, Comparator)であることである。
結論
簡単に説明すると、ComparableとComparatorはクラスのデータメンバを使用してオブジェクトをソートするための2つのインタフェースです。
JavaにおけるComparableとComparatorの主な違いは、Comparableが1つの要素に基づいてコレクションをソートするのに対し、Comparatorは複数の要素に基づいてコレクションをソートすることです。