青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

杰 & C++ & Python & DM

Java Comparator和Comparabler的區別

  新接觸java沒多久,前幾天用到排序的問題,看到Comparator和Comparable兩個接口類有點迷惑,研究了兩天也沒理解有什么區別,今天在看《Java核心編程》時,才恍然大悟。在這里表達一下自己的想法。
  當需要排序的集合或數組時可以使用Comparator或Comparable,它們都可以實現排序,但是它們的區別是Comparator從外部定義了對象的比較規則,而Comparable則是從內部定義了對象是可比較的。下面將詳細解這句話。

一、 Comparator
  Comparator從外部定義了對象的比較規則
  比如,你要使用某人寫的一個矩形類Rect。現在你有一個Rect的集合(或數組),你想實現對Rect的排序,現在有一個問題,某人在實現Rect的時候沒有考慮到會有人將會比較Rect對象。這個時候你必須根據需要對Rect進行排序(比如,根據矩形的長進行排序),在這個場景下使用Comparator,因為Rect類已經存在,你不能對其進行改變。

import java.util.*;

public class Rectangle {
    
    
public static void main(String[] args)
    {
        Rect[] rectArrays 
= new Rect[] {new Rect(34), new Rect(52), new Rect(45)};
        
        
// 排序,將定義的RectComparator作為參數
        Arrays.sort(rectArrays, new RectComparator());
        
        
for (int i=0; i != rectArrays.length; ++i)
            System.out.println(rectArrays[i]);
    }
    
    
// 定義一個Rect比較方式:根據Rect的長比較
    public static class RectComparator implements Comparator<Rect>
    {
        
public int compare(Rect o1, Rect o2)
        {
            
return o1.getLength() - o2.getLength();
        }
    }

    
public static class Rect
    {
        Rect(
int l, int w)
        {
            
this.length = l;
            
this.width = w;
        }
        
        
public int getLength()
        {
            
return this.length;
        }
        
        
public int getWidth()
        {
            
return this.width;
        }
        
        
public int getArea()
        {
            
return this.length * this.width;
        }
        
        
public String toString()
        {
            
return "length: " + length + " width: " + width;
        }
        
        
private int length;
        
private int width;
    }
}

輸出:
length: 3 width: 4
length: 4 width: 5
length: 5 width: 2


二、 Comparable
  Comparable則是從內部定義了對象的是可比較的
  還是以Rect為例,假如你是Rect的實現者,在你定義Rect時,你覺得有必要定義一個比較方式,這個時候就應該使Rect繼承Comparable接口。如果你覺得較合理的排序方式是根據Rect的面積進行排序,那么可以這樣實現

import java.util.*;

public class Rectangle {
    
    
public static void main(String[] args)
    {
        Rect[] rectArrays 
= new Rect[] {new Rect(34), new Rect(52), new Rect(45)};
        
        Arrays.sort(rectArrays);
        
        
for (int i=0; i != rectArrays.length; ++i)
            System.out.println(rectArrays[i]);
    }

    
// 定義了Comparable接口
    public static class Rect implements Comparable<Rect>
    {
        Rect(
int l, int w)
        {
            
this.length = l;
            
this.width = w;
        }
        
        
public int getLength()
        {
            
return this.length;
        }
        
        
public int getWidth()
        {
            
return this.width;
        }
        
        
public int getArea()
        {
            
return this.length * this.width;
        }
        
        
public String toString()
        {
            
return "length: " + length + " width: " + width;
        }
        
        
// 重載compareTo函數,按面積比較
        @Override
        
public int compareTo(Rect that)
        {
            
return this.getArea() - that.getArea();
        }
        
        
private int length;
        
private int width;
    }
}
輸出:
length: 5 width: 2
length: 3 width: 4
length: 4 width: 5

三、總結
通過Comparator和Comparable的意思我們也可以看出兩者的區別
Comparable意為“可比較的”,一個類繼承了Camparable接口則表明這個類的對象之間是可以相互比較的,這個類對象組成的集合就可以直接使用sort方法排序。
Comparator意為“比較算子”,因此Comparator可以看成一種算法的實現,將算法和數據分離。

  另外,通過定義方式,我們可以發現如果一個類繼承了Comparable接口,則表明這個類的對象之間是可以比較的,且比較的方式只有一種。但是Comparator可以定義多種比較方式。在第二個程序中,Rect定義了按面積進行比較,如果我們想按長對Rect進行排序,那么也可以通過Comparator來實現。

  最后,再次強調Comparator從外部定義了對象的比較規則,而Comparable則是從內部定義了對象是可比較的


參考資料
http://www.blogjava.net/fastunit/archive/2008/04/08/191533.html
《Java核心編程》第7版,p91-p92





posted on 2012-04-11 16:04 jaysoon 閱讀(1208) 評論(0)  編輯 收藏 引用 所屬分類: Java


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章分類

文章檔案

收藏夾

C++

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲日本理论电影| 国产精品av一区二区| 欧美在线啊v| 亚洲人成在线观看| 在线免费日韩片| 国产欧美在线看| 国产精品午夜视频| 国产美女精品视频| 国产欧美日韩精品专区| 欧美午夜免费电影| 国产精品久久久久久五月尺| 欧美日韩国产黄| 欧美激情黄色片| 欧美精品九九| 国产精品一国产精品k频道56| 国产精品久久福利| 国产一二精品视频| 中文国产成人精品| 久久av在线| 欧美精品色一区二区三区| 国产精品xvideos88| 国产亚洲亚洲| 99国产精品视频免费观看| 亚洲美女在线看| 欧美一区二区精美| 亚洲精品美女久久7777777| 亚洲特级毛片| 欧美激情va永久在线播放| 国产精品老女人精品视频| 亚洲成人在线网站| 久久久久国产免费免费| 亚洲人被黑人高潮完整版| 欧美制服第一页| 欧美亚洲在线观看| 午夜精品理论片| 亚洲私人影院| 亚洲欧洲精品天堂一级| 午夜在线精品偷拍| 国产精品久久久爽爽爽麻豆色哟哟| 伊人久久大香线| 麻豆精品在线视频| 欧美在线视频免费播放| 欧美色区777第一页| 亚洲精品三级| 亚洲国产精品传媒在线观看| 久久久999| 国外成人性视频| 欧美高清不卡在线| 久久这里有精品视频| 亚洲国产成人在线视频| 欧美国产日本| 欧美日韩亚洲综合| 久久av最新网址| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲欧美文学| 亚洲欧美在线观看| 亚洲福利视频一区| 亚洲欧洲日产国码二区| 国产精品久久久久久久午夜片| 亚洲一区中文字幕在线观看| 亚洲伊人久久综合| 一区二区三区在线观看视频 | 亚洲最新在线| 国产精品久久国产愉拍 | 揄拍成人国产精品视频| 亚洲精选久久| 在线观看欧美精品| 亚洲视频在线看| 亚洲激情在线视频| 亚洲欧美日韩在线播放| 亚洲人成网站色ww在线| 亚洲在线中文字幕| 99在线热播精品免费99热| 欧美大片免费观看在线观看网站推荐| 久久成人一区二区| 在线观看亚洲精品视频| 亚洲欧美日本国产专区一区| 一区二区三区四区精品| 久久激情五月丁香伊人| 一区二区三区视频在线播放| 久久婷婷麻豆| 亚洲国产综合91精品麻豆| 国产欧美日韩伦理| 午夜精品福利在线| 欧美日韩在线视频观看| 亚洲大胆视频| 一区二区动漫| 欧美三区在线观看| 亚洲色诱最新| 欧美一级午夜免费电影| 国产一区二区三区在线观看精品 | 亚洲视频日本| 亚洲综合大片69999| 国产日产欧产精品推荐色| 欧美一区二区三区播放老司机 | 亚洲精品裸体| 欧美日韩在线综合| 欧美一区二区成人| 亚洲日韩第九十九页| 亚洲专区一区二区三区| 一区在线免费观看| 欧美精品 国产精品| 欧美一级久久久| 亚洲免费电影在线| 巨乳诱惑日韩免费av| 一本一本久久a久久精品综合妖精| 欧美性淫爽ww久久久久无| 午夜久久美女| 亚洲综合日韩在线| 亚洲九九爱视频| 欧美成人在线免费视频| 久久亚洲精品一区二区| 性伦欧美刺激片在线观看| 欧美高清影院| 欧美日本国产| 一本大道久久a久久综合婷婷| 久久一区欧美| 香蕉国产精品偷在线观看不卡| 一区在线影院| 亚洲高清视频的网址| 韩日精品视频一区| 激情久久综艺| 亚洲精品久久久久| 亚洲精品视频在线观看免费| 国产一级一区二区| 黑人巨大精品欧美一区二区| 国产欧美 在线欧美| 国产在线不卡| 亚洲精品免费一二三区| 一区二区三区四区五区视频| 一区二区三区 在线观看视| 亚洲欧美视频一区| 久久久久久亚洲精品杨幂换脸| 免费高清在线一区| 99国产精品久久久久久久久久| 一本色道久久综合狠狠躁篇怎么玩| 亚洲亚洲精品三区日韩精品在线视频 | 久久久久国产一区二区三区四区| 欧美一级淫片aaaaaaa视频| 久久久蜜臀国产一区二区| 欧美成人午夜剧场免费观看| 欧美天堂在线观看| 亚洲福利专区| 久久国产精品久久久久久电车| 久久激情婷婷| 亚洲色图综合久久| 欧美极品欧美精品欧美视频| 国产精品一区二区三区乱码| 亚洲精品日韩欧美| 久久综合久久久| 亚洲天堂av在线免费| 91久久精品国产91性色tv| 99成人在线| 欧美精品在线一区二区| 国产一区二区成人久久免费影院| 亚洲影音一区| 一本色道久久综合亚洲精品不| 久久色中文字幕| 黄网站免费久久| 久久最新视频| 欧美一级久久| 欧美成人嫩草网站| 亚洲精品免费一区二区三区| 久久视频在线看| 久久成人av少妇免费| 伊人激情综合| 欧美黄在线观看| 欧美日韩 国产精品| 一区二区三区四区蜜桃| 99国产精品久久久久久久| 国产精品亚洲综合一区在线观看| 亚洲精品久久| 欧美一区二区三区免费大片| 国产日韩三区| 亚洲国产一区二区三区a毛片| 免费观看成人| 制服诱惑一区二区| 欧美自拍丝袜亚洲| 亚洲小视频在线| 久久精品国产亚洲一区二区| 伊人激情综合| 99视频一区| 91久久极品少妇xxxxⅹ软件| 日韩视频一区二区三区| 国产亚洲一级高清| 亚洲第一久久影院| 好吊成人免视频| 亚洲一区二区三区午夜| 亚洲国产视频a| 久久久国产精品一区| 亚洲欧美在线视频观看| 欧美激情精品久久久久久变态| 久久av老司机精品网站导航| 欧美系列精品| 亚洲一区二区三区四区在线观看| 亚洲精品日韩精品| 欧美日韩精品免费| 国产精品丝袜久久久久久app| 欧美激情影音先锋| 国产一区二区高清不卡|