如何实现对象的排序Comparable

来源:互联网 发布:linux文件强制锁 编辑:程序博客网 时间:2024/05/18 23:13

作者:叁念


问题情形:
有这么一组对象(员工类),他们都有姓名属性(name),工资(salary ).现在我们希望他能够以工资的多少进行升序排序,应该怎么办?


  1. 首先请看员工类组成:
public class User {    private String name;    private double salary;    public User(String name, double salary) {        super();        this.name = name;        this.salary = salary;    }    @Override    public String toString() {        return "User [name=" + name + ", salary=" + salary + "]";    }}
  1. 我们现在有主类如下:
import java.util.Arrays;import java.util.Random;public class Test {    public static void main(String[] args) {        User [] userArrary = new User [10];        Random random = new Random();        for (int i = 0; i < userArrary.length; i++) {            int salary = random.nextInt(101);            userArrary[i] = new User("员工" + i + "号", salary);        }        System.out.println(Arrays.toString(userArrary));    }}

以上输出结果如下:

[User [name=员工0号, salary=69.0], User [name=员工1号, salary=61.0], User [name=员工2号, salary=38.0], User [name=员工3号, salary=19.0], User [name=员工4号, salary=84.0], User [name=员工5号, salary=6.0], User [name=员工6号, salary=7.0], User [name=员工7号, salary=0.0], User [name=员工8号, salary=35.0], User [name=员工9号, salary=36.0]]
  1. 好!现在就开始对员工对象以薪水排序,要实现Comparable接口,重写compareTo方法
public class User implements Comparable<User> {    private String name;    private double salary;    public User(String name, double salary) {        super();        this.name = name;        this.salary = salary;    }    @Override    public String toString() {        return "User [name=" + name + ", salary=" + salary + "]";    }    @Override    public int compareTo(User o) {        if(this.salary > o.salary) return 1;         else if(this.salary < o.salary) return -1;         else return 0;//      也可以这么写//      return Double.compare(this.salary, o.salary);    }}

4.主类写法以及运行结果(这样就实现了以对象属性大小的排序)

import java.util.Arrays;import java.util.Random;public class Test {    public static void main(String[] args) {        User [] userArrary = new User [10];        Random random = new Random();        for (int i = 0; i < userArrary.length; i++) {            int salary = random.nextInt(101);            userArrary[i] = new User("员工" + i + "号", salary);        }        System.out.println(Arrays.toString(userArrary));        System.out.println("排序后:");//      排序        Arrays.sort(userArrary);        System.out.println(Arrays.toString(userArrary));    }}

结果:

[User [name=员工0号, salary=42.0], User [name=员工1号, salary=66.0],  User [name=员工3号, salary=2.0], User [name=员工5号, salary=0.0], User [name=员工6号, salary=58.0], User [name=员工7号, salary=70.0], User [name=员工8号, salary=87.0], User [name=员工9号, salary=7.0]]排序后:[User [name=员工5号, salary=0.0], User [name=员工3号, salary=2.0], User [name=员工9号, salary=7.0], User [name=员工4号, salary=23.0], User [name=员工0号, salary=42.0], User [name=员工6号, salary=58.0],User [name=员工1号, salary=66.0],User [name=员工7号, salary=70.0], User [name=员工2号, salary=82.0], User [name=员工8号, salary=87.0]]
阅读全文
0 0
原创粉丝点击