LoginSignup
1
0

More than 3 years have passed since last update.

ComparableとComparator(オブジェクトの順序付け)

Posted at

とても紛らわしい

ソートしたければHashSetではなくTreeSetを用いればよいが、自分のオリジナルの順序付けを施したいことがある。そんなときにComparatorやComparableが有効である。

Comparable

java.lang.Comparable インターフェース「比較可能」
(1)TreeSetクラスは、内部で要素を並べ替える時にComparable型にキャストする処理を行なっている。
(2)標準ライブラリのStringクラスやIntegerクラスなどの値クラスはComparableインターフェースを実装している。

Myclass.java
class MyClass implements Comparable<Myclass>{
  //抽象メソッドの実装
  public int compareTo(Myclass obj){
    return this.id - obj.id; 
  }
}
//昇順

Comparator

java.util.Comparatorインターフェース 「比較器」
Comparatorが利用されるモチベーションは、TreeSetやTreeMapなどに格納される要素の並べ替え順序をデフォルトとは別の順序に変更したいような時である。

Myclass.java
class Myclass implements Comparator<String>{
  @Override 
  public int compare(String obj1, String obj2){
     return obj1.length() - obj2.length();
  }
}
//昇順
コンストラクタ 説明
TreeSet(Comparator<? super E> comparator) 指定されたコンパレータにしたがってソートされた新しい空のツリーセットを作成する

TreeSetにはComparatorオブジェクトを引数にとるコンストラクタが宣言されている(OraDocsに記載されている)ので任意の並べ替え順序を適用できる。

まとめ

Comparableは「自分と他のオブジェクトを比較」   
Comparatorは「他の2つのオブジェクトを比較」
(備忘録:ComparableやComparatorが紛らわしいというよりかは、TreeSetやTreeMapの定義があやふやなのかも)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0