Comparator and Comparable 及Collections and Collection 的區別及聯繫

Collection是接口,Collections是類,這是二者最明顯的區別
Collections提供了一 些static方法來對 Collection對象進行處理,比如:對Collection對象的複製、添加元素、修改元素、對元素進行排序、交換倆個元素的位置、取 Collection的子集等等操作。另外Collection是j2sdk中集合框架的根接口,所有的其他特殊類型的結合接口或者類都直接或間接的實現 了這個接口。
說到這,就不得不提一提Array和Arrays了。他們的區別和Collection/Collections一樣。我就不多說了,這個東西不是哪有的,而是我積累的,在這裏給大家提個醒,知道有這麼回事就行了。
而Comparator 和Comparable都是接口,倆者之間可以說沒什麼關係。
Comparator位於包java.util下,而Comparable位於包 java.lang下。通俗的說:Comparator是一個比較器,相當於一種工具,它定義了倆個方法,分別是 int compare(T o1, T o2)和 boolean (Object obj),所以你可以通過實現這個接口來是定義你所有需要的比較器,如比較兩個人的大小,對象人有姓名、性別、年齡等屬性,你在定義這個比較器的時候就可以在compare方法中對傳入的倆個參數(person1,person2)的年齡進行大小的比較,從而確定這倆個人的大小。
而Comparable接口是你要是定義的類要實現的一個接口(如果這個類的實例需要和同一類的別的實例比較大小,而這個大小關係你希望是你自己定義的),它只提供了 int compareTo(T o)方法,也就是說假如我定義了一個Person類,這個類實現了 Comparable接口,那麼當我實例化Person類的person1後,我想比較person1和一個現有的Person對象person2的大小時,我就可以這樣來調用:person1.comparTo(person2),通過返回值就可以判斷了;而此時如果你定義了一個 PersonComparator(實現了Comparator接口)的話,那你就可以這樣:
PersonComparator comparator= new PersonComparator();
comparator.compare(person1,person2);
詳細的說明看看sun的java API文檔,說的很清楚。

====================================================

1。 關於Comparable和Comparator,昨天剛好有個帖子,整理了下。
public interface Comparable {

public abstract int compareTo(Object o);
}

看Comparable的方法,可以看到是要用類繼承Comparable,再重寫compareTo(Object o);這個方法 。會把 o cast到當前的類。再在方法裏比較當前的對象和o 的順序或者大小,如果大於或者在集合裏是後面就返回正值,小於或者前面就返回負值,相當或者順序無關就返回0。
用法:

public class Some implements Comparable {

public Some () {
}

public int compareTo(Object obj) {
//
比較this 中的屬性和(Some)obj中的屬性,做判斷。
}
}

排序或者比較時:
//在其他類中使用,s是一個集合裏有很多Some對象。
Collections.sort(s);
另一個Comparator

public interface Comparator {
public abstract int compare(Object o1, Object o2);
public abstract boolean equals(Object obj);
}


Comparator是在java.util這個包裏,一般來說當對於要根據其他屬性,或變量來定義一個類的中對象和另一個對象的順序時,會用到Comparator,如果正常按照自然順序排列,直接implements Comparable就可以。或者因爲它的compare方法傳入的是兩個要比較的對象,所以可以獨立於要比較的對象。

用法:
public class Some () {
}

import java.util.Comparator;

public class SomeComparator implements Comparator{

public int compare(Some s1,Some s2){
//
寫代碼,獲得.sequence 和比較一下s1,s2,
//如果返回正值,s1大。如果返回負值,s2大。
}

在其他類,你需要排序的地方
public Collection getcollectionOrderby(List l) {
///l
裏面都是Some的對象
retuen Collections.sort(lnew SomeComparator());
}
對於下面的也通用:

Arrays.{binarySearch(), sort()}, Collections.{binarySearch(), max(), min(), sort()},


2. Collections
是JAVA中一個實用類,用來對Collection,ArrayList,Set等進行基本的操作,封裝了常用的方法,都是靜態的,可以直接調用。
Collection是一個interface,他是JAVA中所有Collection Framework裏的根節點,其他集合類都要繼承他。看API有說明。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章