Comparable的作用
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
通俗的讲就是对两个对象进行比较大小,然后进行排序。
哪些类实现了Comparable接口
String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。
重写compareTo(obj)的规则
- 如果当前对象this大于形参对象obj,则返回正整数,
- 如果当前对象this小于形参对象obj,则返回负整数,
- 如果当前对象this等于形参对象obj,则返回零。
如何使用Comparable
题目: 我们使用年龄从小到大排序,如果年龄相同则按照姓名从小到大排序
-
自定义类实现Comparable重写compareTo方法
-
public class Students implements Comparable<Students> { private String name; private int age; public Students() { } public Students(String name, int age) { this.name = name; this.age = age; } 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; } @Override public String toString() { return "Students{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int compareTo(Students o) { if (this.age>o.age){ return 1; }else if (this.age<o.age){ return -1; }else { return this.name.compareTo(o.name); } } }
-
把对象写入数组中。
-
调用数组工具类的sort方法,实际执行的就是自己重写的compareTo方法
-
String类可以直接排序就是因为它实现了comparable,我们调用sort的时候,实际执行的还是compareTo方法
-
@Test public void test(){ Students[] students = new Students[5]; students[0] = new Students("zhangsan",15); students[1] = new Students("lucy",15); students[2] = new Students("lisi",18); students[3] = new Students("ami",20); students[4] = new Students("jack",16); Arrays.sort(students); for (Students student : students) { System.out.println(student); } }
-
注意: 如果我们把对象写入数组中,使用Arrays.sort排序。如果我们把对象写出集合中,使用Collections.sort排序。