Java如何使用比较器?
TreeSet和TreeMap的存储元素都是排序顺序。然而,它是定义正是排序顺序装置的比较器。
Comparator接口定义了两个方法:compare( ) 和equals()。在compare()方法,如下所示,比较两个元素的顺序:
compare 方法:
int compare(Object obj1, Object obj2)
obj1 和 obj2 是要进行比较的对象。此方法返回零,如果对象是相等的。如果obj1是大于obj2,它返回一个正值。否则,将返回一个负值。
通过重写compare( ),可以改变的对象是有序的方式。例如,如果要相反的顺序进行排序,可以创建一个比较器,一个反转比较的结果。
equals 方法:
equals()方法,如下所示,测试一个对象是否等于调用比较:
boolean equals(Object obj)
obj是equal被测试的对象。如果obj和调用对象是两个比较对象,并使用相同的排序方法返回true。否则,返回false。
重写equals()方法是不必要的,也是最简单的比较是不会这样做的。
例子:
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类的排序和集合一样。