Java经典编程300例之实例063 使用Comparable接口自定义排序

实例说明

默认情况下,保存在List集合中的数组是不进行排序的,不过可以通过使用Comparable接口自定义排序规则并自动排序。本实例将介绍如何使用Comparable接口自定义排序规则并自动排序。

 

实现过程

新建一个Java类,名称为Employee。在该类中首先定义3个属性,分别是id(表示员工的编号)、name(表示员工的姓名)和age(表示员工的年龄),然后在构造方法中初始化这3个属性,最后再实现接口中定义的compareTo()方法,将对象按编号升序排列。

Employee.java

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 + "\t,");
        sb.append("员工的年龄:" + age);
        return sb.toString();
    }
}

重写接口中的方法时,要将访问权限限定符设为public,因为接口中的方法默认就是public的。

 

再新建一个名称为Test的类,用于进行测试。在该类中首先定义一个List集合来保存3Employee对象,并通过遍历输出集合中的元素,再通过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.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<T> {

   int compareTo(T o);

}

当需要对一个对象进行排序时,该对象应该实现Comparable接口,并实现其唯一的方法compareTo()。在该方法中定义自己的排序规则,当调用Arrays.sort(Object[]a)或Collectons.sort(List<T> list)方法时会回调compareTo()方法,并按照自己的规则对对象数组或列表进行排序。

返回值及比较规则:

1、返回负值---->小于

2、返回零------>等于

3、返回正值---->大于

 

如果一个类要实现这个接口,可以使用如下语句声明:

publicclass Employee implements Comparable<Employee> {}

 

Employee中必须实现接口中定义的compareTo()方法。实现该方法后,如果将该对象保存在列表中,那么可以通过执行Collections.sort()方法进行自动排序;如果保存在数组中,那么可以通过执行Arrays.sort()方法进行自动排序。

 

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值