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クラスの並べ替えは、コレクションと同じです。