文章目录

  • 实例描述:
  • 实现过程
  • 代码如下:
  • 代码解析:
  • 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();
	}
}
  1. 在项目中创建一个名为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()方法进行自动排序。

知识扩展

如果不想实现在接口中定义的方法,则可以将类声明为抽象类,将接口中定义的方法声明为抽象方法。