Java:sort方法如何给对象进行排序?
当需要使用Arrays.sort()或者Collections.sort()方法对一个非基本数据类型的集合进行排序时。
1、可以让这个类实现Comparable接口,重写compareTo方法(排序规则)。
2、可以使用Comparator接口的实现类,重写compare方法。
一、Comparable接口
1、需要排序的类实现此接口,实现排序方法compareTo方法。
2、使用sort方法进行排序。
例子:
Man类在排序时,先使用age进行排序,若age一致,则根据salary进行排序。
public class Man implements Comparable<Man> { private int age; private double salary; /** * 排序规则: * 1.返回值大于0,则大于传进来的值 * 2.返回值等于0,则等于 * 3.返回值小于0,则小于传进来的值 */ @Override public int compareTo(Man man) { if(this.age-man.age!=0){ //年龄小的在前 return this.age-man.age; }else if(this.salary- man.salary!=0){ //工资小的在前 return (int) (this.salary- man.salary); }else { return 0; } }
测试:
public static void main(String[] args) { Man t1 = new Man(11,7000);//2 Man t2 = new Man(33,7000);//4 Man t3 = new Man(11,3000);//1 Man t4 = new Man(33,5000);//3 Man[] man = {t1,t2,t3,t4}; //冒泡排序,升序 Arrays.sort(man); for (Man m:man) { System.out.println(m); } }
结果:
二、Comparator接口
一般采取匿名内部类的形式进行调用。
例子:
public static void main(String[] args) { Man t1 = new Man(11,7000);//2 Man t2 = new Man(33,7000);//4 Man t3 = new Man(11,3000);//1 Man t4 = new Man(33,5000);//3 Man[] man = {t1,t2,t3,t4}; //冒泡排序 Arrays.sort(man, new Comparator<Man>() { @Override public int compare(Man man, Man t1) { //年龄大的在前 if(t1.getAge()- man.getAge()!=0) { return t1.getAge() - man.getAge(); }else if(t1.getSalary()-man.getSalary()!=0){ //工资高的在前 return (int) (t1.getSalary()-man.getSalary()); }else { return 0; } } }); for(Man m:man){ System.out.println(m); } }
结果: