【java】实现Interface java.lang.Comparable接口的int compareTo(T o)方法实现对象数组或链表或集合的排序,和挽救式对象比较器Interface java.util.Comparator

 1 package 对象比较排序;
 2 
 3 import java.util.Arrays;
 4 
 5 class A implements Comparable<A>{
 6     private String name;
 7     private int age;
 8     public A(String name,int age){
 9         this.name=name;
10         this.age=age;
11     }
12     @Override
13     public int compareTo(A o) {//此方法无需手工调用,Arrays会自动调用
14         if(this.age<o.age)
15             return -1;//1.this小于返回负数,this大于返回正数,则升序;
16         if(this.age>o.age)
17             return 1;//2.this小于返回正数,this大于返回负数,则降序;
18         return 0;//相等返回0
19     }
20     @Override
21     public String toString() {
22         return "name="+name+",age="+age+"
";
23     }
24 }
25 public class TestComparable {
26     public static void main(String[] args) {
27         A[] as=new A[]{
28                     new A("张三",63),
29                     new A("李四",33),
30                     new A("王五",53),
31                     new A("赵六",43),
32                 };
33         Arrays.sort(as);
34         System.out.println(Arrays.toString(as));
35     }
36 }
View Code

运行结果:

[name=李四,age=33
, name=赵六,age=43
, name=王五,age=53
, name=张三,age=63
]


 1 package 对象比较排序;
 2 
 3 import java.util.Arrays;
 4 import java.util.Comparator;
 5 
 6 class B{
 7     private String name;
 8     private int age;
 9     public B(String name,int age){
10         this.name=name;
11         this.age=age;
12     }
13     public int getAge() {
14         return age;
15     }
16     @Override
17     public String toString() {
18         return "name="+name+",age="+age+"
";
19     }
20 }
21 class BComparator implements Comparator<B>{
22     @Override
23     public int compare(B o1, B o2) {
24         if(o1.getAge()<o2.getAge())
25             return -1;
26         if(o1.getAge()>o2.getAge())
27             return 1;
28         return 0;
29     }
30 }
31 public class TestComparator {
32     public static void main(String[] args) {
33         B[] bs=new B[]{new B("张三",44),
34                 new B("李四",33),
35                 new B("王二",55),
36                 new B("赵六",66)};
37         BComparator bc=new BComparator();
38         Arrays.sort(bs, bc);
39         System.out.println(Arrays.toString(bs));
40     }
41 }
View Code

运行结果:

[name=李四,age=33
, name=张三,age=44
, name=王二,age=55
, name=赵六,age=66
]


如果需要对一组对象进行排序建议优先使用Comparable