关于比较排序比较的接口 或者是类有:java.lang.Comparable<T>接口,
一个抽象类通过实现这个接口可以进行自然排序,也就是一个如果一个自定义类通过implements关键字实现Comparable<T>接口,并且要重写这个接口中的CompareTo()抽象方法,可以再这个方法中定义自己的比较规则;然后再向集合对象中添加元素的时候,就会自动调用compareTo()方法,对集合中的元素进行排序。
对于实现这个接口的类的对象,可以使用Collections类中的静态方法,sort()进行自动排序。
public class Student implements Comparable<Student> {
private String name;
private int age;
…
public int compareTo(Student o) {
int num = this.age-o.age;
return num==0 ? this.name.compareTo(o.name): num;
…
}
在main()方法中可以使用:
TreeSet<Student> ts = new TreeSet<>();
ts.add(new Student("张三",23));
ts.add(new Student("赵琪",23));
ts.add(new Student("李四",32));
ts.add(new Student("王五",78));
ts.add(new Student("赵六",26));
System.out.println(ts);
实现对添加到TreeSet集合中的元素进行排序。
还有一中实现集合中的元素进行排序的方法:另外自定义一个比较器类实现Comparator<T>接口,然后在这个比较器类中重写compare()方法,在这个方法中定义自己的比较规则;在需要使用的时候可以将一个比较器的对象(也就是Comparator<T>接口的子类对象,可以使用匿名内部类实现)传给集合的构造方法,再向集合中添加元素的时候就可以实现对集合中的元素进行排序。
实例:
定义一个比较器:
class CompareByLen implements Comparator<String>{//比较器
@Override
public int compare(String o1, String o2) {
//比较字符串的长度
int num = o1.length() - o2.length();
//如果字符串的长度相同,就按照字母的顺序比较
return num == 0 ? o1.compareTo(o2) : num;
}
在main()方法中可以通过:
TreeSet<String> ts = new TreeSet<>(new CompareByLen());
ts.add("ffffff");
ts.add("a");
ts.add("ef");
ts.add("gan");
ts.add("rs");
System.out.println(ts);
实现对要添加到集合中的元素进行排序。
这种方法就是—比较器方法。
Java.util.Comparator<T>