Java-using-comparator

提供:Dev Guides
移動先:案内検索

Java-コンパレータの使用方法

TreeSetとTreeMapはどちらも、要素をソートされた順序で保存します。 ただし、_sorted order_の意味を正確に定義するのはコンパレータです。

Comparatorインターフェースは、compare()およびequals()の2つのメソッドを定義します。 ここに示すcompare()メソッドは、順序について2つの要素を比較します-

比較メソッド

int compare(Object obj1, Object obj2)

obj1とobj2は比較されるオブジェクトです。 オブジェクトが等しい場合、このメソッドはゼロを返します。 obj1がobj2より大きい場合、正の値を返します。 それ以外の場合、負の値が返されます。

compare()をオーバーライドすることにより、オブジェクトの順序付け方法を変更できます。 たとえば、逆の順序で並べ替えるには、比較の結果を逆にするコンパレータを作成できます。

equalsメソッド

ここに示すequals()メソッドは、オブジェクトが呼び出しコンパレータと等しいかどうかをテストします-

boolean equals(Object obj)

objは、等しいかどうかをテストするオブジェクトです。 objと呼び出しオブジェクトが両方ともComparatorオブジェクトであり、同じ順序を使用している場合、メソッドはtrueを返します。 そうでなければ、falseを返します。

equals()のオーバーライドは不要であり、ほとんどの単純なコンパレーターはそうしません。

import java.util.*;

class Dog implements Comparator<Dog>, Comparable<Dog> {
   private String name;
   private int age;
   Dog() {
   }

   Dog(String n, int a) {
      name = n;
      age = a;
   }

   public String getDogName() {
      return name;
   }

   public int getDogAge() {
      return age;
   }

  //Overriding the compareTo method
   public int compareTo(Dog d) {
      return (this.name).compareTo(d.name);
   }

  //Overriding the compare method to sort the age
   public int compare(Dog d, Dog d1) {
      return d.age - d1.age;
   }
}

public class Example {

   public static void main(String args[]) {
     //Takes a list o Dog objects
      List<Dog> list = new ArrayList<Dog>();

      list.add(new Dog("Shaggy", 3));
      list.add(new Dog("Lacy", 2));
      list.add(new Dog("Roger", 10));
      list.add(new Dog("Tommy", 4));
      list.add(new Dog("Tammy", 1));
      Collections.sort(list);  //Sorts the array list

      for(Dog a: list)  //printing the sorted list of names
         System.out.print(a.getDogName() + ", ");

     //Sorts the array list using comparator
      Collections.sort(list, new Dog());
      System.out.println(" ");

      for(Dog a: list)  //printing the sorted list of ages
         System.out.print(a.getDogName() +"  : "+ a.getDogAge() + ", ");
   }
}

これは、次の結果を生成します-

出力

Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy  : 1, Lacy  : 2, Shaggy  : 3, Tommy  : 4, Roger  : 10,

-Arraysクラスの並べ替えは、コレクションと同じです。