TreeSet和TreeMap都按排序顺序存储元素。但是,比较器(Comparator)精确地定义了排序顺序的含义。
比较器(Comparator)接口定义了两个方法:compare()和equals()。
Compare方法
int compare(Object obj1,Object obj2)
obj1和obj2是要比较的对象。如果对象相等,则此方法返回零。如果obj1大于obj2,则返回正值。否则,将返回负值。
Equals方法
此处显示的equals()方法测试对象是否等于调用比较器-
boolean equals(Object obj)
obj是要测试是否相等的对象。如果obj和调用对象都是Comparator对象,并且使用相同的顺序,则该方法返回true。否则,它返回false。
Comparator示例
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; } //覆盖 compareTo 方法 public int compareTo(Dog d) { return (this.name).compareTo(d.name); } //覆盖比较方法对年龄进行排序 public int compare(Dog d, Dog d1) { return d.age - d1.age; } } public class Example { public static void main(String args[]) { //获取一个 Dog 对象列表 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); //对数组列表进行排序 for(Dog a: list) //打印名称的排序列表 System.out.print(a.getDogName() + ", "); //使用比较器对数组列表进行排序 Collections.sort(list, new Dog()); System.out.println(" "); for(Dog a: list) //打印年龄的排序列表 System.out.print(a.getDogName() +" : "+ a.getDogAge() + ", "); } }
这将产生以下输出-
Lacy, Roger, Shaggy, Tammy, Tommy, Tammy : 1, Lacy : 2, Shaggy : 3, Tommy : 4, Roger : 10,
注意-Arrays类的排序与Collections相同。
参考链接
https://www.learnfk.com/java/java-using-comparator.html
标签:Java,Comparator,list,无涯,Dog,new,排序,public From: https://blog.51cto.com/u_14033984/8890837