对象数组排序

       在面对对象编程中数组是经常使用到的数据结构,特别是对象数组的使用。对象属性排序也很常见,例如在一家公司内部员工姓名字典顺序,年龄大小,收入高低等进行排序等。

java中可以通过类实现Comparable接口来实现比较,重写compareTo方法可以达到属性比价的目的。最后只需要调用sort方法就能实现对对象数组进行排序的功能。

下面以公司的员工信息排序对象,给出以下代码:

class Assignmnent implements Comparable<Assignmnent>
{
    private String name="";
    private int id=0;
    private double sal=0;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public double getSal() {
        return sal;
    }
    public void setSal(double sal) {
        this.sal = sal;
    }
    public Assignmnent(String name, int id, double sal) {
        super();
        this.name = name;
        this.id = id;
        this.sal = sal;
    }
    public int compareTo(Assignmnent arg0) {
        if(arg0 instanceof Assignmnent)
        {
            ///return Double.compare(this.sal,arg0.sal);
            ///改变参数位置可以实现不同的排序方式
            return Double.compare(arg0.sal,this.sal);   
        }
        return 0;
    }
    public String toString()
    {
        String s="";
        return s="姓名 "+this.getName()+" 工作号是: "+this.getId()+" 工资是 "+this.getSal();


    }


}

      实现Comparable接口重写compareTo方法,Double.compare(arg0.sal,this.sal)是依据员工sal属性进行比较,Double.compare(arg0.sal,this.sal)会返回一个int数值,若arg0.sal>this.sal则会返回一个正数(如+1),相等则返回0,小于返回一个负数(-1)。之后调用Arrays.sort(assignment)测试即可。

下面是测试代码:

Assignmnent[] assignment=new Assignmnent[6];
        assignment[0]=new Assignmnent("Bob",1001,1000.8);
        assignment[1]=new Assignmnent("James",1002,999.8);
        assignment[2]=new Assignmnent("Kccy",1003,998.8);
        assignment[3]=new Assignmnent("Lours",1004,1008.8);
        assignment[4]=new Assignmnent("Frui",1005,1010.8);
        assignment[5]=new Assignmnent("Dual",1006,1018.8);
        for(int i=0;i<assignment.length;i++)
        {
            System.out.println(assignment[i].toString());
        }
        //很明显要对对象数组进行排序必须要实现Comparable接口 重写compareTo方法之后才能调用Arrays.sort()方法

        Arrays.sort(assignment);
        System.out.println("按工资进行排序后:");
        for(int i=0;i<assignment.length;i++)
        {
            System.out.println(assignment[i].toString());
        }
        if(assignment[0] instanceof Comparable)
        {
            System.out.println("实现了这个接口");
        }

以下是测试结果:

姓名 Bob 工作号是: 1001 工资是 1000.8
姓名 James 工作号是: 1002 工资是 999.8
姓名 Kccy 工作号是: 1003 工资是 998.8
姓名 Lours 工作号是: 1004 工资是 1008.8
姓名 Frui 工作号是: 1005 工资是 1010.8
姓名 Dual 工作号是: 1006 工资是 1018.8
按工资进行排序后:
姓名 Dual 工作号是: 1006 工资是 1018.8
姓名 Frui 工作号是: 1005 工资是 1010.8
姓名 Lours 工作号是: 1004 工资是 1008.8
姓名 Bob 工作号是: 1001 工资是 1000.8
姓名 James 工作号是: 1002 工资是 999.8
姓名 Kccy 工作号是: 1003 工资是 998.8

通过改变compareTo()中Double.compare()中的参数顺序可以实现升序和降序的排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值