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

杰 & 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 閱讀(1206) 評論(0)  編輯 收藏 引用 所屬分類: Java

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章分類

文章檔案

收藏夾

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>
            欧美一区二区在线观看| 伊人狠狠色j香婷婷综合| 中文av一区二区| 一区二区三区av| 国产精品视区| 免费日韩视频| 欧美黄色一区| 欧美一区二区三区电影在线观看| 亚洲欧美制服中文字幕| 精品成人一区| 亚洲免费精彩视频| 国模叶桐国产精品一区| 亚洲国产精品视频一区| 欧美性视频网站| 久久久一本精品99久久精品66| 久久久久国内| 亚洲永久免费| 裸体女人亚洲精品一区| 亚洲一区免费视频| 免费不卡视频| 久久激情五月激情| 欧美精品一区二区三区久久久竹菊| 亚洲免费一在线| 免费在线国产精品| 久久精品72免费观看| 欧美精品一区二区蜜臀亚洲| 羞羞答答国产精品www一本| 久久久免费精品| 亚洲综合色在线| 欧美sm视频| 久久久亚洲国产天美传媒修理工| 欧美激情综合在线| 久久先锋资源| 国产精品视频专区| 日韩香蕉视频| 亚洲国产另类久久久精品极度| 亚洲图片欧洲图片日韩av| 亚洲经典视频在线观看| 欧美一区二区三区视频| 亚洲综合第一页| 欧美精品一区二区三区在线看午夜| 久久精品国产v日韩v亚洲| 欧美日韩午夜精品| 亚洲日本成人网| 亚洲大胆视频| 久久精品免费观看| 久久精品1区| 国产精品日本一区二区| av成人老司机| 中国亚洲黄色| 欧美日韩国产成人在线91| 欧美高潮视频| 在线观看免费视频综合| 欧美制服第一页| 欧美在线一区二区| 国产精品夜夜夜一区二区三区尤| 亚洲日本va午夜在线影院| 亚洲巨乳在线| 欧美国产视频一区二区| 欧美激情麻豆| 99精品国产在热久久婷婷| 麻豆成人av| 亚洲国产精品尤物yw在线观看 | 欧美精品1区2区| 亚洲福利视频三区| 亚洲精品视频免费在线观看| 免费短视频成人日韩| 欧美黄色免费网站| 亚洲精品美女免费| 欧美日韩八区| 亚洲性视频网站| 久久久蜜桃一区二区人| 伊人久久综合| 欧美承认网站| 99精品国产在热久久下载| 亚洲视频一区在线| 国产乱码精品一区二区三区忘忧草| 亚洲一区二区三区中文字幕| 久久大逼视频| 亚洲激情女人| 欧美性猛交xxxx乱大交退制版| 亚洲视频欧洲视频| 久久久久久电影| 亚洲国产三级在线| 欧美日韩一二区| 午夜亚洲福利| 欧美黄网免费在线观看| 亚洲视频在线一区| 国产区亚洲区欧美区| 久久精品最新地址| 亚洲精品专区| 久久久久欧美| 一级成人国产| 国产一区自拍视频| 欧美日韩国产成人在线免费| 午夜精品久久久久久99热| 美女999久久久精品视频| 亚洲精品影院在线观看| 国产精品视频不卡| 牛人盗摄一区二区三区视频| 夜夜爽99久久国产综合精品女不卡| 久久久av水蜜桃| 一区二区三区不卡视频在线观看 | 久久久亚洲人| 亚洲一区综合| 亚洲激情电影在线| 国产欧美一区二区视频| 欧美日韩国产在线| 久久久久久久久一区二区| 亚洲精品日本| 欧美 日韩 国产精品免费观看| 亚洲午夜影视影院在线观看| 亚洲成人在线视频播放| 国产女人精品视频| 欧美日韩大片| 欧美1区2区视频| 欧美一区二区视频免费观看| 亚洲精品永久免费精品| 免费成人网www| 久久九九热免费视频| 亚洲影院在线观看| 99re热这里只有精品视频| 黑人一区二区| 国产午夜精品久久久久久免费视| 欧美日韩在线不卡一区| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲欧美日韩天堂| 亚洲香蕉在线观看| 这里只有精品丝袜| 日韩视频免费看| 亚洲伦理网站| 99国产精品国产精品毛片| 欧美激情亚洲综合一区| 欧美成人中文字幕在线| 久久综合九色欧美综合狠狠| 久久国产精品免费一区| 欧美一区二区三区婷婷月色 | 亚洲色图综合久久| 99国产精品国产精品久久| 亚洲国产精品久久久| 亚洲国产影院| 亚洲美女黄色| 一本到12不卡视频在线dvd| 99精品欧美一区二区三区| 日韩午夜电影| 亚洲私人影吧| 亚洲欧美日韩国产| 久久国产主播精品| 另类av一区二区| 欧美激情一区在线观看| 亚洲欧洲精品一区| 99综合电影在线视频| 亚洲一级片在线观看| 午夜精品久久久久久99热软件| 欧美在线资源| 欧美大尺度在线观看| 欧美日韩国产大片| 国产精品自拍一区| 黄色一区二区三区| 日韩午夜在线电影| 亚洲男女自偷自拍图片另类| 欧美一进一出视频| 蜜臀va亚洲va欧美va天堂| 亚洲国产日韩精品| 亚洲视频精品在线| 欧美一区午夜精品| 免费一级欧美在线大片| 国产精品mv在线观看| 国产亚洲成人一区| 亚洲三级视频| 欧美在线关看| 亚洲国产视频一区| 亚洲免费婷婷| 欧美成人精品三级在线观看| 欧美午夜一区二区| 一区一区视频| 亚洲一区高清| 欧美激情91| 午夜精品久久久久久久久| 欧美激情 亚洲a∨综合| 国产视频一区三区| 一区二区三区久久网| 久久亚洲风情| 亚洲一区二区三区色| 免费成人在线观看视频| 国产日韩久久| 亚洲中字在线| 亚洲高清久久久| 欧美在线视频网站| 欧美亚州一区二区三区| 亚洲欧洲日韩综合二区| 久久九九电影| 亚洲一区二区伦理| 欧美色视频在线| 亚洲欧洲精品一区二区三区不卡 | 国产手机视频一区二区| 亚洲素人在线| 亚洲黄色成人| 美腿丝袜亚洲色图| 在线成人国产|