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()で比較するのでしょうか?
(これで解決したような気もしますが)
質問がわかりずらくてすみません。何か解釈の間違いがあればご指摘お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# 「データが失なわれる可能性...
-
interface,extend,implementの...
-
【設計思想の質問】staticメソ...
-
C#でインターフェースのプロパ...
-
JAVAにFTP転送をサポートし...
-
「ラッパークラス」の存在意義...
-
デバッグ時に「Source not found」
-
JTextFieldの入力制限
-
setTextについて
-
委譲って何ですか?
-
インターフェースは New 出来な...
-
(vba)他のアプリケーションの右...
-
Commons-Discovery.jarとは?
-
ASP.NETでの共通コードの書き方...
-
JavaでのAPIの覚え方ってみさな...
-
310-035の参考書の中にあるThre...
-
全パッケージの取得、全クラス...
-
インターフェース型の使い方が...
-
VB DLLプロジェクトについて
-
ワイルドカードマッチング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
「ラッパークラス」の存在意義...
-
(vba)他のアプリケーションの右...
-
抽象クラスをJUNITでテストする...
-
オーバーライドとラッパーの違い
-
C# 「データが失なわれる可能性...
-
【C#】クラスのコンストラクタ...
-
JTextFieldの入力制限
-
c++でのヘッダーファイルの循環...
-
vb.net 自作プロパティの削除に...
-
「継承されたメソッドの可視性...
-
ASP.NETでの共通コードの書き方...
-
Javaのインスタンス化の構文の...
-
Javaで下線
-
メソッドの引数にクラス名を渡す
-
VB DLLプロジェクトについて
-
C#からDLLを呼びたいのですが・...
-
インターフェース型の使い方が...
-
委譲って何ですか?
-
C# 継承の問題で programに示さ...
おすすめ情報