<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    于吉吉的技術(shù)博客

    建造高性能門(mén)戶(hù)網(wǎng)

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      65 隨筆 :: 6 文章 :: 149 評(píng)論 :: 0 Trackbacks
    在深入了解TreeMap之前,有兩個(gè)接口要先弄清楚,分別是Comparable和Comparator

    Comparable & Comparator

    Comparable
    Comparable 此接口強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類(lèi)的對(duì)象進(jìn)行整體排序。這種排序被稱(chēng)為類(lèi)的自然排序,類(lèi)的 compareTo 方法被稱(chēng)為它的自然比較方法。對(duì)象本身就已經(jīng)支持自比較所需要實(shí)現(xiàn)的接口(如 String、Integer 自己就可以完成比較大小操作)。

    它只有一個(gè)方法,int compareTo(T o),用來(lái)比較當(dāng)前對(duì)象和傳入的參數(shù),查看jdk api,共有這一批類(lèi)實(shí)現(xiàn)了此接口,見(jiàn)下圖


    打開(kāi)實(shí)現(xiàn)了該接口的Integer包裝類(lèi)查看源碼

    public final class Integer extends Number implements Comparable<Integer> {

        
    public int compareTo(Integer anotherInteger) {
        
    int thisVal = this.value;
        
    int anotherVal = anotherInteger.value;
        
    return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));
        }

    可以看到該方法通過(guò)當(dāng)前的Integer對(duì)象的值是否大于傳入的參數(shù)來(lái)得到返回值,Integer的compareTo實(shí)現(xiàn)是按數(shù)字大小的自然排序,再找另一個(gè)例子String

    public final class String
        
    implements java.io.Serializable, Comparable<String>, CharSequence
    {
    public int compareTo(String anotherString) {
        
    int len1 = count;
        
    int len2 = anotherString.count;
        
    int n = Math.min(len1, len2);
        
    char v1[] = value;
        
    char v2[] = anotherString.value;
        
    int i = offset;
        
    int j = anotherString.offset;

        
    if (i == j) {
            
    int k = i;
            
    int lim = n + i;
            
    while (k < lim) {
            
    char c1 = v1[k];
            
    char c2 = v2[k];
            
    if (c1 != c2) {
                
    return c1 - c2;
            }
            k
    ++;
            }
        } 
    else {
            
    while (n-- != 0) {
            
    char c1 = v1[i++];
            
    char c2 = v2[j++];
            
    if (c1 != c2) {
                
    return c1 - c2;
            }
            }
        }
        
    return len1 - len2;
        }

    可以看出String的compareTo實(shí)現(xiàn)是按字符串中字符的Unicode值進(jìn)行排序的,也真是因?yàn)楦鞣N類(lèi)實(shí)現(xiàn)的不同,所以只有在相互可比的類(lèi)才能進(jìn)行排序,否則會(huì)拋出java.lang.ClassCastException的異常。應(yīng)該說(shuō)Comparable是集合內(nèi)部實(shí)現(xiàn)的排序,想要進(jìn)行集合外的排序就需要Comparator接口。

    Comparator
    如果一個(gè)類(lèi)不能實(shí)現(xiàn)Comparable接口,那么我們自己可以提供Comparator的排序,如果你不喜歡缺省的Comparator行為,照樣可以編寫(xiě)自己的Comparator。

    Comparator只有2個(gè)方法,分別為int compare(T o1, T o2) 和boolean equals(Object obj)

    Comparator的compare方法的返回值和Comparable的compareTo返回值基本相似,如果排序第一個(gè)元素出現(xiàn)在第二個(gè)元素之前,則返回一個(gè)負(fù)值,如果第一個(gè)元素出現(xiàn)在第二個(gè)元素后面,返回一個(gè)正值,再否則,返回零。與Comparable不同的是Comparator是由用戶(hù)自行決定處理。
    通過(guò)一個(gè)小例子可以比較明確的看出

          class ComparatorTest implements Comparator{
              
    public int compare(Object u1, Object u2) {
                String uname1 
    = ((User)u1).getName();
                String uname2 
    = ((User)u2).getName();
                
    return uname1.compareTo(uname2);
            }
          }
          
    class User {
              
    private String name;
              
    public String getName(){
                  
    return this.name;
              }
          }

    Comparator比較函數(shù)強(qiáng)行對(duì)某些對(duì)象 collection 進(jìn)行整體排序??梢詫?Comparator 傳遞給 sort 方法(如 Collections.sort),從而允許在排序順序上實(shí)現(xiàn)精確控制。還可以使用 Comparator 來(lái)控制某些數(shù)據(jù)結(jié)構(gòu)(如 TreeSet 或 TreeMap)的順序。
    posted on 2011-06-15 15:07 陳于喆 閱讀(900) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java數(shù)據(jù)結(jié)構(gòu)
    主站蜘蛛池模板: 亚洲av无码专区国产不乱码| 免费无码又爽又刺激高潮| 国产精品亚洲综合一区在线观看| 亚洲AV无码精品色午夜在线观看| 国产特级淫片免费看| 性xxxxx免费视频播放| 久久国产乱子伦精品免费一| 一级免费黄色大片| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲国产综合在线| 亚洲福利视频一区| 亚洲美女又黄又爽在线观看| 亚洲国产中文字幕在线观看| 日韩激情无码免费毛片| 国产成人午夜精品免费视频| 99久久国产免费中文无字幕| 精品亚洲永久免费精品| h视频在线免费观看| 乱淫片免费影院观看| 羞羞漫画页面免费入口欢迎你| 精品国产日韩久久亚洲| 亚洲AV色吊丝无码| 亚洲成人免费电影| 亚洲成人网在线播放| 亚洲精品中文字幕乱码| 亚洲国产精品久久久久| 99人中文字幕亚洲区| 久久久久久久久亚洲| 亚洲AV无码一区二区二三区入口| 国产国拍精品亚洲AV片| 国产偷国产偷亚洲清高动态图| 亚洲日韩乱码中文无码蜜桃臀网站 | 免费无码又爽又刺激网站| 新最免费影视大全在线播放| 深夜A级毛片视频免费| 羞羞视频免费观看| 农村寡妇一级毛片免费看视频| 黄色一级毛片免费看| 成人久久久观看免费毛片| 一级日本高清视频免费观看 | 日韩免费a级在线观看|