您的位置:首页 > 其它

如何实现对象的排序Comparable

2017-12-07 10:03 369 查看
作者:叁念

问题情形:

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

首先请看员工类组成:

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 + "]";
}

}


我们现在有主类如下:

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]]


好!现在就开始对员工对象以薪水排序,要实现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]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐