关闭

对象数组排序

标签: java对象数据结构排序
170人阅读 评论(0) 收藏 举报
分类:

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

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()中的参数顺序可以实现升序和降序的排序。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45684次
    • 积分:1166
    • 等级:
    • 排名:千里之外
    • 原创:67篇
    • 转载:0篇
    • 译文:0篇
    • 评论:39条
    最新评论
    友情链接