Comparable与Comparator实际上是TreeSet集合的两种实现方式,用来实现对象的排序。下边介绍一下两种比较器的使用方法和区别。
Comparable称为元素的自然顺序,或者叫做默认顺序。
Comparator称为元素定制排序。
下边我们使用Student类来比较两个排序方法,类中有年龄和姓名两个属性。
(1)Comparable(让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法)
※如果我们希望按照学生年龄排序,当学生年龄相等时按照姓名排序,可以使用Comparable接口。
※在JavaAPI中是这样对Comparable接口描述的:此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
因此可以看出当我们希望对某个类排序时就需要将此类实现Comparable接口,同时覆写接口中的compareTo()方法。
※compareTo()方法默认比较方式:比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。(下边举个栗子,)
package henu.scm; public class Student implements Comparable{//该接口让该对象强行具有比较性 private String name; private int age; public Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Object obj) { if(!(obj instanceof Student)) { throw new RuntimeException("该类不是Student类"); } Student stu = (Student)obj; if(this.age > stu.age) return 1; else if(this.age == stu.age) return this.name.compareTo(stu.name); return -1; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return this.name + " " + this.age; } }