实例说明
默认情况下,保存在List集合中的数组是不进行排序的,不过可以通过使用Comparable接口自定义排序规则并自动排序。本实例将介绍如何使用Comparable接口自定义排序规则并自动排序。
实现过程
新建一个Java类,名称为Employee。在该类中首先定义3个属性,分别是id(表示员工的编号)、name(表示员工的姓名)和age(表示员工的年龄),然后在构造方法中初始化这3个属性,最后再实现接口中定义的compareTo()方法,将对象按编号升序排列。
Employee.java
public class Employee implements Comparable {
private int id;
private String name;
private int age;
public Employee(int id, String name, int age) { //利用构造方法初始化各个域
this.id = id;
this.name = name;
this.age = age;
}
@Override
public int compareTo(Employee o) { //利用编号实现对象间的比较
if (id > o.id) {
return 1;
} else if (id < o.id) {
return -1;
}
return 0;
}
@Override
public String toString() { //重写toString()方法
StringBuilder sb = new StringBuilder();
sb.append("员工的编号:" + id + ",");
sb.append("员工的姓名:" + name + "\t,");
sb.append("员工的年龄:" + age);
return sb.toString();
}
}
重写接口中的方法时,要将访问权限限定符设为public,因为接口中的方法默认就是public的。
再新建一个名称为Test的类,用于进行测试。在该类中首先定义一个List集合来保存3个Employee对象,并通过遍历输出集合中的元素,再通过Collections.sort()方法执行自动排序,最后再通过遍历输出排序后的集合中的元素。
Test.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Employee(2, "Java", 20));
list.add(new Employee(1, "C", 30));
list.add(new Employee(3, "C#", 10));
System.out.println("排序前");
for (Employee employee : list) {
System.out.println(employee);
}
System.out.println("排序后");
Collections.sort(list);
for (Employee employee : list) {
System.out.println(employee);
}
}
}
编译运行
$javac Employee.java Test.java
$java Test
排序前
员工的编号:2,员工的姓名:Java,员工的年龄:20
员工的编号:1,员工的姓名:C,员工的年龄:30
员工的编号:3,员工的姓名:C#,员工的年龄:10
排序后
员工的编号:1,员工的姓名:C,员工的年龄:30
员工的编号:2,员工的姓名:Java,员工的年龄:20
员工的编号:3,员工的姓名:C#,员工的年龄:10
技术要点
本实例主要一个月java.lang包中的Comparable接口来实现自定义排序规则。Comparable接口用于强行对实现它的每个类的对象进行整体排序,用于指定排序规则。Comparable接口的定义如下:
publicinterface Comparable
int compareTo(T o);
}
当需要对一个对象进行排序时,该对象应该实现Comparable接口,并实现其唯一的方法compareTo()。在该方法中定义自己的排序规则,当调用Arrays.sort(Object[]a)或Collectons.sort(List
返回值及比较规则:
1、返回负值---->小于
2、返回零------>等于
3、返回正值---->大于
如果一个类要实现这个接口,可以使用如下语句声明:
publicclass Employee implements Comparable
在Employee中必须实现接口中定义的compareTo()方法。实现该方法后,如果将该对象保存在列表中,那么可以通过执行Collections.sort()方法进行自动排序;如果保存在数组中,那么可以通过执行Arrays.sort()方法进行自动排序。
如果不想实现在接口中定义的方法,则可以将类声明为抽象类,将接口中定义的方法声明为抽象方法。