Java Comparable排序介面和Comparator比較器介面
實現Comparable介面的類支援排序,假設現在存在“實現Comparable介面的類的物件的List列表(或陣列)”,則該List列表(或陣列)可以通過 Collections.sort(或 Arrays.sort)進行排序。
Comparable位於包java.lang下,Comparable是一個物件本身就已經支援自比較所需要實現的介面(如 String、Integer 自己就可以完成比較大小操作),是內部定義的排序Comparator位於包Java.util下,而Comparator在一個獨立的類中實現比較,是外部實現的排序。Comparator 是策略模式(strategy design pattern),就是不改變物件自身,而用一個策略物件(strategy object)來改變它的行為。比如:你想對整數採用絕對值大小來排序,Integer 是不符合要求的,你不需要去修改 Integer 類(實際上你也不能這麼做)去改變它的排序行為,只要使用一個實現了Comparator介面的物件來實現控制它的排序就行了。
Comparable位於包java.lang下,Comparable是一個物件本身就已經支援自比較所需要實現的介面(如 String、Integer 自己就可以完成比較大小操作),是內部定義的排序Comparator位於包Java.util下,而Comparator在一個獨立的類中實現比較,是外部實現的排序。Comparator 是策略模式(strategy design pattern),就是不改變物件自身,而用一個策略物件(strategy object)來改變它的行為。比如:你想對整數採用絕對值大小來排序,Integer 是不符合要求的,你不需要去修改 Integer 類(實際上你也不能這麼做)去改變它的排序行為,只要使用一個實現了Comparator介面的物件來實現控制它的排序就行了。
1.若一個類要實現Comparable介面:它一定要實現compareTo(T o1, T o2) 函式,但可以不實現 equals(Object obj) 函式。為什麼可以不實現 equals(Object obj) 函式呢? 因為任何類,預設都是已經實現了equals(Object obj)的。 Java中的一切類都是繼承於java.lang.Object,在Object.java中實現了equals(Object obj)函式;所以,其它所有的類也相當於都實現了該函式。compareTo(T o)是“比較本身和o的大小”。返回“負數”,意味著“自身比o小”;返回“零”,意味著“自身等於o”;返回“正數”,意味著“自身大於o”;
2.若一個類要實現Comparator介面:它一定要實現compare(T o1, T o2) 函式,int compare(T o1, T o2) 是“比較o1和o2的大小”。返回“負數”,意味著“o1比o2小”;返回“零”,意味著“o1等於o2”;返回“正數”,意味著“o1大於o2”;
public class ComparablePerson implements Comparable<ComparablePerson>{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(ComparablePerson o) {
//比較Persion物件年齡的大小
if(this.getAge()>o.getAge()){
return 1;
}else if(this.getAge()==o.getAge()){
return 0;
}else{
return -1;
}
}
public ComparablePerson(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Persion [name=" + name + ", age=" + age + "]";
}
}
public class ComparatorPerson implements Comparator<ComparablePerson>{
@Override
public int compare(ComparablePerson sourcePerson, ComparablePerson destPerson) {
if(sourcePerson.getName().compareTo(destPerson.getName())>0){
return 1;
}else if(sourcePerson.getName().compareTo(destPerson.getName())==0){
return 0;
}else{
return -1;
}
}
}
public class TestComparable {
public static void main(String[] args) {
ComparablePerson aPerson = new ComparablePerson("Tom", 24);
ComparablePerson bPerson = new ComparablePerson("Lucy", 22);
ComparablePerson cPerson = new ComparablePerson("Jams", 23);
ArrayList<ComparablePerson> persons = new ArrayList<ComparablePerson>();
persons.add(aPerson);
persons.add(bPerson);
persons.add(cPerson);
System.out.println("Original sort\n:"+persons);
Collections.sort(persons);
System.out.println("Asc(age)\n:"+persons);
Collections.sort(persons, new ComparatorPerson());
System.out.printf("Asc(name) sort\n:%s\n", persons);
}
}
相關文章
- 比較器-Comparable和Comparator
- 從java內建類和自定義類比較Comparable介面和Comparator介面實現排序的不同Java排序
- Java 中 Comparable 和 Comparator 比較Java
- Java Comparable 和 Comparator 介面詳解Java
- JAVA中的Comparable介面和自定義比較器Java
- Java 集合排序策略介面 ComparatorJava排序
- 字串排序 (java comparator介面的使用)字串排序Java
- Java基礎系列-Comparable和ComparatorJava
- 【Java】Collection.sort以及比較器ComparatorJava
- Comparable和Comparator的區別
- 閒說: Java 中Comparable 和 Comparator 的區別Java
- 【JAVA語法】 -- 方便的Comparable介面Java
- 5 分鐘搞定 Java Comparable 介面Java
- 定製排序和比較器排序排序
- 抽象類 & 介面比較抽象
- Comparable與Comparator的區別
- 來吧,一文徹底搞懂Java中的Comparable和ComparatorJava
- Java 8 Comparator: 列表排序Java排序
- 4、Set集合——HashSet、TreeSet(Comparable、Comparator)
- JDK原始碼閱讀-Comparable介面JDK原始碼
- 堆排序和快速排序效能比較排序
- Java 比較器Java
- Java 8: Lambda表示式增強版Comparator和排序Java排序
- Java利用Comparator實現分組排序Java排序
- JAVA Comparator 自定義排序 原始碼分析Java排序原始碼
- Java和JavaSciprt比較Java
- 通過Comparable來實現對自身的比較
- Java8-增強版Comparator和排序之Lambda表示式Java排序
- TreeSet重寫Comparator排序排序
- 京東商品列表介面,商品銷量排序介面,商品價格排序介面程式碼展示排序
- 幾種排序的比較排序
- Java stream sorted使用 Comparator 進行多欄位排序Java排序
- 氣泡排序、歸併排序與快速排序比較排序
- java中抽象類和介面Java抽象
- WEBAPI單據查詢介面提示比較符67錯誤WebAPI
- Comparator.comparing排序使用示例排序
- 排序演算法效能比較排序演算法
- js 深比較和淺比較JS
- Java基礎-抽象類和介面Java抽象