cuiyi's blog(崔毅 crazycy)

          記錄點滴 鑒往事之得失 以資于發展
          數據加載中……

          java基礎(五):怎么對集合對象按某個規則排序 Comparable vs Comparator

          對策: 集合中的對象應該實現Comparable接口,或者實現Comparator接口

          兩者區別:

          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做為更一般的接口,基本可實現與自己的特定比較

          ??? 用法:Collections.sort(obj:Collection, new Compartor());

          ??? 用法:Collections.sort(obj:Collection, new Compartor(public int compare(o1:Object, o2:Object)){return n:int});

          ?? Comparator更適合在沒有實現Comparable的集合對象類中;更像封裝的一種算法,將操作與算法分離,應該是裝飾模式(Decorator Pattern)和訪問者模式(Visitor?? Pattern)的體現



          以下是引用

          要實現排序功能,一般有兩種途徑,這里對基本類型不適用,基本類型一般有Arrays中的靜態方法.

          1.對象本身實現Comparable接口,那么該類的實例就是可以排序的.
          有關Comparable:
          http://blog.csdn.net/treeroot/archive/2004/09/09/99613.aspx
          只要實現了Comparable接口,就可以調用Collections的sort方法對集合中的元素排序.

          2.指定一個Comparator,也就是實現了Comparator的類的一個實例.
          但是Java本身只提供了一個Comparator的實現,就是Collections.reverseOrder().
          該方法返回的是一個已經實現了Comparable接口的反序.

          看一下Comparator的全部內容:

          public interface Comparator {
            int compare(Object o1, Object o2);
            boolean equals(Object obj);
          }
          定義了兩個方法,其實我們一般都只需要實現compare方法就行了,因為類都是默認從Object繼承
          所以會使用Object的equals方法.
          Comparator一般都作為一個匿名類出現,對于沒有實現Comparable的對象的集合,排序的時候
          需要指定一個Comparator.

          這里舉例說明
          對于實現了Comparable的類我們就用最簡單的Integer
          List list=new ArrayList();
          list.add(new Integer(3));
          list.add(new Integer(53));
          list.add(new Integer(34));
          Collections.sort(list);

          對于沒有實現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 閱讀(2658) 評論(0)  編輯  收藏 所屬分類: JavaSE語言

          主站蜘蛛池模板: 宁武县| 宜都市| 衢州市| 庄河市| 惠州市| 峡江县| 杭锦旗| 什邡市| 上虞市| 蕲春县| 景泰县| 宣化县| 卢氏县| 昂仁县| 页游| 迁西县| 德江县| 峨眉山市| 靖江市| 泊头市| 灵武市| 洛川县| 周口市| 郁南县| 阜新市| 潼南县| 舞阳县| 巍山| 仁怀市| 大同市| 呈贡县| 鸡西市| 谷城县| 浪卡子县| 怀远县| 宁南县| 昌吉市| 新干县| 河池市| 保山市| 新和县|