dポイントプレゼントキャンペーン実施中!

ComparableとComparatorの違いについてわからなくて困っています。
以下のURLのサイトを記事を見ているのですが、
http://www.kab-studio.biz/Programing/JavaA2Z/Wor …
http://www.kab-studio.biz/Programing/JavaA2Z/Wor …

java.lang Comparableインタフェース
メソッド public int compareTo(Object o)

java.util Comparatorインタフェース
メソッド public int compare(Object o1, Object o2)
public boolean equals(Object obj)

これらの違いについてなのですが、URLの記事では、

・Comparableインターフェイスの実装クラスにしてcompareTo()メソッドを実装するのは、比較対象が明確であり、比較結果が一般的に分かりやすく容易に想像できる場合にのみとした方がよい
・Comparatorは任意の順番でソートしたい場合にも使用できる。例えば、昇順ではなく降順でソートしたい場合や、複数のデータを持つクラスについて細かく比較方法する場合

と記事にありますが、説明がうまく解釈できないです。

・Comparableは主にラッパークラスやStringなどで使用するためのものなのでしょうか?(実装してるからそうだとは思いますが)
比較対照が明確なので compareToのreturn文で 除算するだけで可能?

・ComparatorはArraysやコレクション、自作クラス向けに任意の順番でソートするためのものなのですか?
自作クラスについてはComparableでもcompareTo()をオーバーライドすれば同じことが可能?

通常はComparator実装クラスのcompare()の中にreturn文でcompareTo()を使用しているような気もします。
この方法だとObject型で引数を渡して、int型に変換して比較になると思いますが、
StringだとComparableを実装してるから、戻り値でint型が返るのかな、
public int compare(String s1, String s2) { return s2.compareTo(s1) }

つまり、自作クラスはインスタンスフィールドにある基本型やObject型(String, Integerなど)の値を使い、
基本型においては除算を使用し、オブジェクト(Comparableを実装しているもの)に対してはcompareTo()で比較するのでしょうか?
(これで解決したような気もしますが)

質問がわかりずらくてすみません。何か解釈の間違いがあればご指摘お願いします。

A 回答 (1件)

英語としての「comparable」と「comparator」の違いは分かりますか? 本質的にはそれがすべてでしょう. 大雑把には


・(同じクラスの他のオブジェクトと) 比較可能であることを示すのが Comparable
・(他のクラスの) 2つのオブジェクトを比較するのが Comparator
だから, 混乱する余地もないはず.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!