1. Comparable接口
-
在java.lang包下,实现了Comparable函数式接口的对象能够天然排序,而数组和集合实现了该接口,因此咱们会用Arrays.sort()或Collections.sort()来排序java
-
Comparable比较大于就返回大于0的数,小于返回小于0,等于返回0数组
-
若是自定义的对象也要排序,就须要实现该接口而且手动重写里面的compareTo()方法
ide
返回值 | 函数名 | 解释 |
---|---|---|
int | compareTo(T o) | 将此对象与指定的对象进行比较以进行排序 |
须要排序的自定义对象函数
public class User implements Comparable<User>{ private int age; private String name; //省略各类Getters、Setters、toString、Constructor @Override //重写方法 public int compareTo(User o) { //根据成绩年龄来排序 if (this.age > o.age) return 1; if (this.age < o.age) return -1; return 0; } }
测试测试
public static void main(String[] args) { //建立泛型集合 ArrayList<User> arrayList = new ArrayList<User>(); //集合添加了四个奇怪名字的User arrayList.add(new User(100,"Howl")); arrayList.add(new User(1,"Howlet")); arrayList.add(new User(50,"晚上没宵夜")); arrayList.add(new User(7,"云吞面")); //compareTo方法测试 System.out.println( "compareTo方法测试: " + new User(100,"Howl").compareTo(new User(1,"Howlet")) + "\n"); //集合类排序 Collections.sort(arrayList); //输出排序后集合 Iterator iterator = arrayList.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } }
输出this
compareTo方法测试: 1 User [age=1, name=Howlet] User [age=7, name=云吞面] User [age=50, name=晚上没宵夜] User [age=100, name=Howl]
2. Comparator
- 在java.util包下,实现该接口的对象能够精确控制排序的顺序,还能够将该比较器传递给Collections.sort或Arrays.sort以实现控制顺序
- 实现该接口须要重写里面的compare()方法
返回值 | 函数名 | 解释 |
---|---|---|
int | compare(T o1, T o2) | 比较其两个参数的顺序 |
须要排序的自定义对象spa
public class UserComparator implements Comparator<User>{ @Override public int compare(User o1, User o2) { //逆序 if (o1.getAge() > o2.getAge()) return -1; if (o1.getAge() < o2.getAge()) return 1; return 0; } }
测试(和上面的同样,只是下面的排序要添加比较器).net
//集合类排序 Collections.sort(arrayList,new UserComparator());
输出code
compareTo方法测试: -1 User [age=100, name=Howl] User [age=50, name=晚上没宵夜] User [age=7, name=云吞面] User [age=1, name=Howlet]
3. 比较两者
- Comparable实现的是天然排序,是对象内部本身实现的
- Comparator实现定制排序,是对象以外实现的,借助了外力来推进比较
- 两者同时存在则使用Comparator排序
本文分享 CNBlog - Howlet。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。xml