Comparable和Comparator



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

相關文章
相關標籤/搜索