JavaにおけるComparableとComparatorの違いとは?分かりやすく解説!

この記事には、アフィリエイト広告を利用しています。

スポンサーリンク


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は複数の要素に基づいてコレクションをソートすることです。

タイトルとURLをコピーしました