文章目录
- 实例描述:
- 实现过程
- 代码如下:
- 代码解析:
- compareTo()方法定义:
- 一个类实现该接口
- 知识扩展
实例描述:
默认情况下 ,保存在List集合中的数组是不进行排序的,不过可以通过使用Comparable接口自定义排序规则并自动排序。本实例将介绍如何使用Comparable接口自定义排序规则并自动排序。
实现过程
1)新建项目ComparabelList,并在其中创建一个Employee.java文件。在该类的主方法中首先定义三个属性:员工编号(id)、员工姓名(name)和员工年龄(age)。然后使用构造方法对其进行初始化,最后再实现接口定义的compareTo()方法,将对象按编号进行排序。
代码如下:
//Employee.java
//实例082 实现List集合中数组的自动排序
public class Employee implements Comparable<Employee> {
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 + ",");
sb.append("员工的年龄" + age );
return sb.toString();
}
}
- 在项目中创建一个名为Test的类,用于执行测试。在该类中首先定义一个List集合来保存三个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<Employee> list = new ArrayList<Employee>();
//定义集合List来保存Employee对象
list.add(new Employee(3, "Lester", 21)); //增加集合对象
list.add(new Employee(2, "Jimmy", 22));
list.add(new Employee(1, "Bonbby",23));
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); //遍历输出排序后集合中的元素
}
}
}
代码解析:
List的中文翻译为"列表"。列表作为集合中的一个子类的不同之处就在于它是有序的,因此,List除继承了所有的Collection的public 和protected方法之外,还添加了一些“顺序操作”功能。本实例主要应用java.lang 包中的Comparable接口来实现自定义规则排序规则。Comparable接口用于强行对实现它的每个类的对象进行整体排序。在实现该接口的类中,必须实现该接口中定义的compareTo()方法,用于指定排序规则。
compareTo()方法定义:
public interface Comparable<T> {
int compareTo(T other);
}
一个类实现该接口
public class Employee implements Comparable<Employee> {}
在Employee中必须实现该接口中定义的compareTo()f方法。实现该方法后,如果将该对象保存到列表中,那么可以通过执行Collections.sort()方法进行自动排序;如果保存到数组中,那么可以通过执行Arrays.sort()方法进行自动排序。
知识扩展
如果不想实现在接口中定义的方法,则可以将类声明为抽象类,将接口中定义的方法声明为抽象方法。