对象间的比较和排序——Comparable和Comparator的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象间的比较和排序——Comparable和Comparator的使用相关的知识,希望对你有一定的参考价值。
参考技术A 在java中,对于基本数据的数值,我们可以直接通过 > 、 < 、 = 来直接进行比较。也可以用 Arrays.sort 来对数值或者字符类型的数组进行排序。但是对象间的比较,和排序我们就无法简单通过上述方法去解决了,因为对象比较的前提,是存在比较和排序的规则,而不同的对象可能各有各的使用场景和比较规则,所以需要我们自己使用JDK提供的API进行定义。Comparable接口是JDK1.2的时候推出的,若一个类实现了Comparable接口,那么这个类就可以支持使用 Arrays.sort 以及 Collections.sort 来进行排序。排序规则的核心在于对接口中的 compareTo 方法进行定义。
使用小案例
在测试类测试
通过输出结果我们可以看到, list 中的各个元素已经按照我们定义好的规则进行了排序
自定义Student类比较器
比较器的定义和实现 Comparable 接口比较相似,定义两个对象的比较规则,大于为正数、小于为负数。接下来我们在测试类中进行测试:
我们在使用 sort 方法进行排序的时候,将自定义比较器作为参数传入即可。
上面我们一共讲了两种方法来实现对象间的比较,那么这两种方法有什么不同呢?
Comparator与Comparable,自定义排序和类比较器,TreeSet对象排序
/** * 学生类 * @author Administrator * */ public class Student { private String sno ; private String sname ; private Integer score ; public Student(String sno, String sname, Integer score) { super(); this.sno = sno; this.sname = sname; this.score = score; } public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } import java.util.Comparator;
/** * 比较算法的类,比较器 * @author Administrator * */ public class MyCmp implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { // TODO Auto-generated method stub if (o1.getScore() > o2.getScore()) { return 1; } else if (o1.getScore() < o2.getScore()) {
return -1;
} else { return 0; } } package tr
import java.util.TreeSet; //测试类 public class Test { public static void main(String[] args) { TreeSet<Student> set = new TreeSet<Student>(new MyCmp()); Student s1 = new Student("1001","chen",67); Student s2 = new Student("1001","zhang",17); Student s4 = new Student("1003","zeng",47); Student s5 = new Student("1004","wang",87); Student s6 = new Student("1005","chao",67); Student s3 = new Student("1002","zhou",62); set.add(s1); set.add(s2); set.add(s3); set.add(s4); set.add(s5); set.add(s6);for(java.util.Iterator<Student> it= set.iterator();it.hasNext();){ Student s = it.next(); System.out.println(s.getSno()+","+s.getSname()+","+s.getScore()); } } }
/** * 学生类 * @author Administrator * */ public class Student1 implements Comparable<Student1>{ private String sno ; private String sname ; private Integer score ; public Student1(String sno, String sname, Integer score) { super(); this.sno = sno; this.sname = sname; this.score = score; } public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public Integer getScore() { return score; } public void setScore(Integer score) { this.score = score; } // 自定义排序规则 @Override public int compareTo(Student1 s) { if (this.getScore() > s.getScore()) { return 1; } else if (this.getScore() < s.getScore()) { return -1; } else { return 0; } } }
以上是关于对象间的比较和排序——Comparable和Comparator的使用的主要内容,如果未能解决你的问题,请参考以下文章
转载Java中Comparable和Comparator比较