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