Arrays 类中的sort方法承诺可以对对象数组进行排序,但是需要对象所属的类实现Comparable接口

任何实现Comparable接口的对象都需要实现该方法 并且在Java SE 5.0之前该方法的的参数必须是Object类型对象,返回一个整形数值 。在Java SE 5.0之后Comparable接口已经改进为泛型类型。

1 public interface Comparable<T> {
2 public int compareTo(T o);
3 }

对于compareTo()方法源码是这样写的:

  • int compareTo(T o)
    将此对象与指定的对象进行比较以进行排序。 返回一个负整数,零或正整数,因为该对象小于,等于或大于指定对象。

    实现程序必须确保sgn(x.compareTo(y)) == -sgn(y.compareTo(x))所有xy。 (这意味着x.compareTo(y)必须抛出异常iff y.compareTo(x)引发异常。)

    实施者还必须确保关系是可传递的: (x.compareTo(y)>0 && y.compareTo(z)>0)表示x.compareTo(z)>0

    最后,实施者必须确保x.compareTo(y)==0意味着sgn(x.compareTo(z)) == sgn(y.compareTo(z)) ,对于所有z

    强烈建议,但不要严格要求(x.compareTo(y)==0) == (x.equals(y)) 。 一般来说,任何实现Comparable接口并违反这种情况的类应清楚地表明这一点。 推荐的语言是“注意:此类具有与equals不一致的自然排序”。

    在前面的描述中,符号sgn( ) 表达式表示数学符号函数,其定义根据表达式的值是否为负,零或正返回的-1一个,0,1。

    参数
    o - 要比较的对象。
    结果
    负整数,零或正整数,因为该对象小于,等于或大于指定对象。
    异常
    NullPointerException - 如果指定的对象为空
    ClassCastException - 如果指定的对象的类型阻止它与该对象进行比较。 

实现代码:

 1 package test;
2
3 import java.util.Arrays;
4
5 public class Employee implements Comparable<Employee> {
6
7 int id;
8
9 String name;
10
11 double salary;
12
13 public Employee() {
14 }
15
16 public Employee(int id, String name, double salary) {
17 super();
18 this.id = id;
19 this.name = name;
20 this.salary = salary;
21 }
22
23 public int getId() {
24 return id;
25 }
26
27 public String getName() {
28 return this.name;
29 }
30
31 public double getSalary() {
32 return salary;
33 }
34
35 public void raiseSalary(double byPercent) {
36 double raise = salary * byPercent / 100;
37 salary += salary;
38
39 }
40
41 /*
42 * Arrays 类中的sort方法承诺可以对对象数组进行排序,但是需要对象所属的类实现Comparable接口
43 *
44 * 任何实现Comparable接口的对象都需要实现该方法 并且该方法的的参数必须是Object类型对象,返回一个整形数值
45 */
46 @Override
47 public int compareTo(Employee other) {
48
49 /*
50 * this.salary < other.salsry 返回 -1
51 * this.salary = other.salsry 返回 0
52 * this.salary > other.salsry 返回 1
53 */
54 return Double.compare(this.salary, other.salary);
55 }
56
57 @Override
58 public String toString() {
59 return "Employee [id=" + id + ", name=" + name + ", salary=" + salary + "]";
60 }
61
62 public static void main(String[] args) {
63 Employee[] staff = new Employee[3];
64
65 staff[0] = new Employee(1, "qijian", 15000.0);
66 staff[1] = new Employee(2, "Herry", 13000.0);
67 staff[2] = new Employee(3, "Tom", 14000.0);
68
69 Arrays.sort(staff);
70
71 for (Employee e : staff) {
72 System.out.println(e.toString());
73 }
74
75 }
76
77 }

结果:

注意:

  该接口对实现它的每个类的对象强加一个整体排序。 这个排序被称为类的自然排序 ,类的compareTo方法被称为其自然比较方法

最新文章

  1. Swift编程语言简介
  2. Linux启动管理:grub
  3. 嵌入式ARM系统开发基础
  4. 不一样的编码风格--Lambda表达式
  5. git与svn的区别-小结一下
  6. MySQL user表root用户误删除后恢复
  7. 应用highcharts做直观数据统计
  8. 使用cx_Freeze 将python3代码打包成.exe程序
  9. PMBOK 项目管理 九大知识领域和五大流程 PMI
  10. 【Python】 压缩文件处理 zipfile &amp; tarfile
  11. Tomcat启动特慢之SecureRandom问题解决
  12. 解决PowerDesigner 16 Generate Datebase For Sql2005/2008 对象名sysproperties无效的问题
  13. Thinkphp基础配置
  14. 校正PHP服务器时间不准的问题
  15. java④
  16. cxgrid动态生成footersummary 并获得值
  17. LayoutParams继承于Android.View.ViewGroup.LayoutParams(转)
  18. mysql中查询一个字段属于哪一个数据库中的哪一个表的方式
  19. State of the official Elasticsearch Java clients
  20. struts的status属性

热门文章

  1. (1)Consul在linux环境的集群部署
  2. Mybatis log plugin 破解!!!
  3. 区块链学习5:智能合约Smart contract原理及发展历程科普知识
  4. PyQt(Python+Qt)学习随笔:QTableWidgetItem的位置相关方法
  5. 第15.5节 PyQt的历史沿革介绍
  6. 【Docker】 .Net Core 3.1 webapi 集成EF Code First,使用MySql进行业务操作 、配置swagger (三)
  7. OLLVM简单入门
  8. Scrum冲刺_Day04
  9. 题解-[SDOI2017]数字表格
  10. Class常量池、运行时常量池、字符串常量池的一些思考