码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-28 22:33:12      阅读:357      评论:0      收藏:0      [点我收藏+]

标签:重写   over   构造方法   关于   rri   字符串   ring   ffffff   vat   

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

 

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

标签:重写   over   构造方法   关于   rri   字符串   ring   ffffff   vat   

原文地址:https://www.cnblogs.com/nesnes/p/9867622.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!