对集合中的元素进行排序,接口Comparator<T>和Comparable<T>的使用

关于比较排序比较的接口 或者是类有: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>

 

posted @ 2018-10-28 22:16  张森(ZhangSen)  阅读(928)  评论(0编辑  收藏  举报