在面对对象编程中数组是经常使用到的数据结构,特别是对象数组的使用。对象属性排序也很常见,例如在一家公司内部员工姓名字典顺序,年龄大小,收入高低等进行排序等。
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(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());
}
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()中的参数顺序可以实现升序和降序的排序。