熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

比較comparable和Comparator

2013-11-23 18:55:15  來源: Java核心技術 
Comparable & Comparator 都是用來實現集合中的排序的只是 Comparable 是在集合內部定義的方法實現的排序Comparator 是在集合外部實現的排序所以如想實現排序就需要在集合外定義 Comparator 接口的方法或在集合內實現 Comparable 接口的方法
 
  具體請看 <Thinking   in   java>
 
  Comparable 是一個對象本身就已經支持自比較所需要實現的接口(如 StringInteger 自己就可以完成比較大小操作)
 
  而 Comparator 是一個專用的比較器當這個對象不支持自比較或者自比較函數不能滿足你的要求時你可以寫一個比較器來完成兩個對象之間大小的比較
 
  可以說一個是自已完成比較一個是外部程序實現比較的差別而已
 
  用 Comparator 是策略模式(strategy design pattern)就是不改變對象自身而用一個策略對象(strategy object)來改變它的行為
 
  比如你想對整數采用絕對值大小來排序Integer 是不符合要求的你不需要去修改 Integer 類(實際上你也不能這麼做)去改變它的排序行為只要使用一個實現了 Comparator 接口的對象來實現控制它的排序就行了
 
  java 代碼
   // AbsComparatorjava    
import   javautil*;

public   class   AbsComparator   implements   Comparator   {    
    public   int   compare(Object   o   Object   o)   {    
      int   v   =   Mathabs(((Integer)o)intValue());    
      int   v   =   Mathabs(((Integer)o)intValue());    
      return   v   >   v   ?     :   (v   ==   v   ?     :   );    
    }    
}
  可以用下面這個類測試 AbsComparator
 

  // Testjava
import   javautil*;

  public   class   Test   {
    public   static   void   main(String[]   args)   {

  //產生一個個隨機整數的數組(有正有負)
      Random   rnd   =   new   Random();
      Integer[]   integers   =   new   Integer[];
      for(int   i   =   ;   i   <   integerslength;   i++)
      integers[i]   =   new   Integer(rndnextInt()   *   (rndnextBoolean()   ?      :   ));

  systemoutprintln(用Integer內置方法排序);
      Arrayssort(integers);
      systemoutprintln(ArraysasList(integers));

  systemoutprintln(用AbsComparator排序);
      Arrayssort(integers   new   AbsComparator());
      systemoutprintln(ArraysasList(integers));
    }
}


 

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25976.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.