一個類,若是實現了Comparable接口,咱們能夠很容易的將它在數組或是集合中進行排序。so。。。Comparable這個接口是用來實現對象排序的。 假設有這麼一個類:算法
public class CompObj implements Comparable<CompObj> { private int age; private String name; public CompObj(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public String getName() { return name; } //重點在這,這是接口中惟一的一個方法 @Override public int compareTo(@NonNull CompObj another) { return this.age - another.age; } }
而後咱們能夠這樣對他進行排序:數組
List<CompObj> list = ...;//初始化一個list Collections.sort(list); //集合排序,就是這麼簡單 CompObj array[] = ...;//初始化一個數組 Arrays.sort(list); //數組排序,就是這麼簡單
如今對comparaTo()方法進行簡單說明。
comparaTo()方法傳入該類的另一個實例,返回一個int值,這個方法每執行一次都是對傳入的對象和和本生對象進行比較。返回的int值若是是一個正值(不包括零)則在數組或是集合中交換兩個實例的位置,不然位置保持不變。ide
實現了Comparable接口的類,能夠很好的和集合類或是一些泛型算法很好的協做,你能夠付出很小的代價實現強大的功能。this
(1)你寫的類是一個值類(前面的文章介紹過)。
(2)類中有很明顯的內在排序關係,如字母排序、按數值順序或是時間等。
(3)前面二者是而且關係。code
(1)知足對稱性。
即對象A.comparaTo(B) 大於0的話,則B.comparaTo(A)必須小於0;對象
(2)知足傳遞性。
即對象A.comparaTo(B) 大於0,對象B.comparaTo(Z)大於0,則對象A.comparaTo(Z)必定要大於0;排序
(3)建議comparaTo方法和equals()方法保持一致。
即對象A.comparaTo(B)等於0,則建議A.equals(B)等於true。繼承
(4)對於實現了Comparable接口的類,儘可能不要繼承它,而是採起復合的方式。接口