java基礎(chǔ)(五):怎么對集合對象按某個規(guī)則排序 Comparable vs Comparator
兩者區(qū)別:
1) Comparable接口只有一個方法 compareTo(obj:Object):int
?? Comparator接口有兩個方法:?
????????? compare(o1:Object, o2:Object):int;
????????? equals(obj:Object):boolean
??? 用法:Collections.sort(obj:Collection)
2) Comparable位于java.lang包
?? Comparator位于java.util包
3) Comparable做為更一般的接口,基本可實現(xiàn)與自己的特定比較
??? 用法:Collections.sort(obj:Collection, new Compartor());
??? 用法:Collections.sort(obj:Collection, new Compartor(public int compare(o1:Object, o2:Object)){return n:int});
?? Comparator更適合在沒有實現(xiàn)Comparable的集合對象類中;更像封裝的一種算法,將操作與算法分離,應(yīng)該是裝飾模式(Decorator Pattern)和訪問者模式(Visitor?? Pattern)的體現(xiàn)
以下是引用
要實現(xiàn)排序功能,一般有兩種途徑,這里對基本類型不適用,基本類型一般有Arrays中的靜態(tài)方法.
1.對象本身實現(xiàn)Comparable接口,那么該類的實例就是可以排序的.
有關(guān)Comparable: http://blog.csdn.net/treeroot/archive/2004/09/09/99613.aspx
只要實現(xiàn)了Comparable接口,就可以調(diào)用Collections的sort方法對集合中的元素排序.
2.指定一個Comparator,也就是實現(xiàn)了Comparator的類的一個實例.
但是Java本身只提供了一個Comparator的實現(xiàn),就是Collections.reverseOrder().
該方法返回的是一個已經(jīng)實現(xiàn)了Comparable接口的反序.
看一下Comparator的全部內(nèi)容:
public interface Comparator {
int compare(Object o1, Object o2);
boolean equals(Object obj);
}
定義了兩個方法,其實我們一般都只需要實現(xiàn)compare方法就行了,因為類都是默認從Object繼承
所以會使用Object的equals方法.
Comparator一般都作為一個匿名類出現(xiàn),對于沒有實現(xiàn)Comparable的對象的集合,排序的時候
需要指定一個Comparator.
這里舉例說明
對于實現(xiàn)了Comparable的類我們就用最簡單的Integer
List list=new ArrayList();
list.add(new Integer(3));
list.add(new Integer(53));
list.add(new Integer(34));
Collections.sort(list);
對于沒有實現(xiàn)Comparable的,我們就用Object,按照hashCode大小來排序.
List list= new ArrayList();
list.add(new Object());
list.add(new Object());
list.add(new Object());
Collections.sort(list,new Comparator(){ public int compare(Object o1, Object o2){
return (o1.hashCode()-o2.hashCode());
});
posted on 2006-12-22 02:00 crazycy 閱讀(2653) 評論(0) 編輯 收藏 所屬分類: JavaSE語言