1.自然排序
class ComparableTest implements Comparable<ComparableTest>{//实现自然排序的类
private String name;
private Integer age;
@Override
public int compareTo(ComparableTest o) {//重写自然排序
// TODO Auto-generated method stub
if(this.age<o.age) {
return -1;
}
return 1;
}
public ComparableTest() {
super();
// TODO Auto-generated constructor stub
}
public ComparableTest(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "ComparableTest [name=" + name + ", age=" + age + "]";
}
}
//main方法中的代码。
ComparableTest c1 = new ComparableTest("ch", 20);
ComparableTest c2 = new ComparableTest("ch1", 22);
ComparableTest c3 = new ComparableTest("ch2", 21);
ArrayList<ComparableTest> list = new ArrayList<ComparableTest>();
list.add(c1);
list.add(c2);
list.add(c3);
//Collections.sort()方法调用后,jvm根据继承了Comparable<T>的对象内部的重写自然排序的对象进行排序
Collections.sort(list);
for (ComparableTest comparableTest : list) {
System.out.println(comparableTest);
}
}
//排序后的结构
ComparableTest [name=ch, age=20]
ComparableTest [name=ch2, age=21]
ComparableTest [name=ch1, age=22]
2.比较器排序
Integer[] a = {1,3,2,4};
Arrays.sort(a);
System.out.println(Arrays.toString(a));//没用比较器前的默认排序为由小到大
Arrays.sort(a,new Comparator<Integer>() {//匿名内部类实现比较器
@Override
public int compare(Integer o1, Integer o2) {//o1为后进来的值,o2为被比较的值
// TODO Auto-generated method stub
if(o1>o2)
return -1;
else
return 1;
}
});
System.out.println("-------------"+"自定义排序后的结果");
System.out.println(Arrays.toString(a));
[1, 2, 3, 4]
-------------自定义排序后的结果
[4, 3, 2, 1]
ps:比较器排序的优先级高于自然排序的优先级
版权声明:本文为qq_45086286原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。