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

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

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

    隨筆 - 71  文章 - 15  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    因為口渴,上帝創造了水;
    因為黑暗,上帝創造了火;
    因為我需要朋友,所以上帝讓你來到我身邊
    Click for Shaanxi xi'an, Shaanxi Forecast
    ╱◥█◣
      |田|田|
    ╬╬╬╬╬╬╬╬╬╬╬
    If only I have such a house!
    〖總在爬山 所以艱辛〗
    Email:myesjoy@yahoo.com.cn
    NickName:yesjoy
    MSN:myesjoy@hotmail.com
    QQ:150230516

    〖總在尋夢 所以苦痛〗

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    Hibernate在線

    Java友情

    Java認證

    linux經典

    OA系統

    • ¤易能協同辦公系統¤
    • 流程管理、知識管理、客戶關系管理、輔助辦公
    • ¤黃城網絡辦公系統3.0¤
    • B/S結構,適用于Intranet/Internet應用,實現無地域限制的全球辦公,具有郵件管理、業務管理、網絡硬盤、智能工作流等功能。

    Spring在線

    Structs在線

    專家專欄

    企業信息化

    大型設備共享系統

    工作流

    工作流產品

    網上購書

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    比較函數
    TreeSet和TreeMap都按排序順序存儲元素。然而,精確定義采用何種“排序順序”的是比較函數。通常在默認的情況下,這些類通過使用被Java稱之為“自然順序”的順序存儲它們的元素,而這種順序通常也是你所需要的(A在B的前面,1在2的前面,等等)。如果需要用不同的方法對元素進行排序,可以在構造集合或映射時,指定一個Comparator對象。這樣做為你提供了一種精確控制如何將元素儲存到排序類集和映射中的能力。
      
      Comparator接口定義了兩個方法:compare( )和equals( )。這里給出的compare( )方法按順序比較了兩個元素:
      
      int compare(Object obj1, Object obj2)
      
      obj1和obj2是被比較的兩個對象。當兩個對象相等時,該方法返回0;當obj1大于obj2時,返回一個正值;否則,返回一個負值。如果用于比較的對象的類型不兼容的話,該方法引發一個ClassCastException異常。通過覆蓋compare( ),可以改變對象排序的方式。例如,通過創建一個顛倒比較輸出的比較函數,可以實現按逆向排序。
      
      這里給出的equals( )方法,測試一個對象是否與調用比較函數相等:
      
      boolean equals(Object obj)
      
      obj是被用來進行相等測試的對象。如果obj和調用對象都是Comparator的對象并且使用相同的排序。該方法返回true.否則返回false.重載equals( )方法是沒有必要的,大多數簡單的比較函數都不這樣做。
      
      1 使用比較函數
      
      下面是一個說明定制的比較函數能力的例子。該例子實現compare( )方法以便它按正常順序的逆向進行操作。因此,它使得一個樹集合按逆向的順序進行存儲。
    // Use a custom comparator.
    import java.util.Comparator;
    //A reverse comparator for strings.
    public class MyComp implements Comparator {
        
    public int compare(Object a, Object b) {
            String aStr, bStr;
            aStr 
    = (String) a;
            bStr 
    = (String) b;
            
    // reverse the comparison
            return bStr.compareTo(aStr);
        }

        
    // no need to override equals
    }

    import java.util.Iterator;
    import java.util.TreeSet;

    public class CompDemo {
        
    public static void main(String[] args) {
            
    // Create a tree set
            TreeSet ts = new TreeSet(new MyComp());
            
    // Add elements to the tree set
            ts.add("C");
            ts.add(
    "A");
            ts.add(
    "B");
            ts.add(
    "E");
            ts.add(
    "F");
            ts.add(
    "D");
            
    // Get an iterator
            Iterator i = ts.iterator();
            
    // Display elements
            while (i.hasNext()) {
                Object element 
    = i.next();
                System.out.print(element 
    + " ");
            }

            System.out.println();
        }

    }


    正如下面的輸出所示,樹按照逆向順序進行存儲:
      
      F E D C B A
      
      仔細觀察實現Comparator并覆蓋compare( )方法的MyComp類(正如前面所解釋的那樣,覆蓋equals( )方法既不是必須的,也不是常用的)。在compare( )方法內部,String方法compareTo( )比較兩個字符串。然而由bStr??不是aStr??調用compareTo( )方法,這導致比較的結果被逆向。
      
      對應一個更實際的例子,下面的例子是用TreeMap程序實現前面介紹的存儲賬目資產平衡表例子的程序。在前面介紹的程序中,賬目是按名進行排序的,但程序是以按照名字進行排序開始的。下面的程序按姓對賬目進行排序。為了實現這種功能,程序使用了比較函數來比較每一個賬目下姓的排序。得到的映射是按姓進行排序的。
    //Use a comparator to sort accounts by last name.
    import java.util.Comparator;

    //Compare last whole words in two strings.
    public class TComp implements Comparator {

        
    public int compare(Object a, Object b) {
            
    int i, j, k;
            String aStr, bStr;
            aStr 
    = (String) a;
            bStr 
    = (String) b;
            
    // find index of beginning of last name
            i = aStr.lastIndexOf(' ');
            j 
    = bStr.lastIndexOf(' ');
            k 
    = aStr.substring(i).compareTo(bStr.substring(j));
            
    if (k == 0// last names match, check entire name
                return aStr.compareTo(bStr);
            
    else
                
    return k;
        }

        
    // no need to override equals
    }

    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;

    public class TreeMapDemo2 {
        
    public static void main(String[] args) {
            
    // Create a tree map
            TreeMap tm = new TreeMap(new TComp());
            
    // Put elements to the map
            tm.put("John Doe"new Double(3434.34));
            tm.put(
    "Tom Smith"new Double(123.22));
            tm.put(
    "Jane Baker"new Double(1378.00));
            tm.put(
    "Todd Hall"new Double(99.22));
            tm.put(
    "Ralph Smith"new Double(-19.08));
            
    // Get a set of the entries
            Set set = tm.entrySet();
            
    // Get an iterator
            Iterator itr = set.iterator();
            
    // Display elements
            while (itr.hasNext()) {
                Map.Entry me 
    = (Map.Entry) itr.next();
                System.out.print(me.getKey() 
    + "");
                System.out.println(me.getValue());
            }

            System.out.println();
            
    // Deposit 1000 into John Doe's account
            double balance = ((Double) tm.get("John Doe")).doubleValue();
            tm.put(
    "John Doe"new Double(balance + 1000));
            System.out.println(
    "John Doe's new balance: " + tm.get("John Doe"));
        }

    }


      這里是程序的輸出結果,注意此時的賬目是按姓進行排序的:
      
      Jane Baker: 1378.0
      
      John Doe: 3434.34
      
      Todd Hall: 99.22
      
      Ralph Smith: -19.08
      
      Tom Smith: 123.22
      
      John Doe’s new balance: 4434.34
      
      比較函數類TComp比較兩個包含姓和名的字符串。它首先比較姓。具體是這樣做的,它首先尋找每一個字符串中最后一個空格的下標,然后比較從這個位置開始的每一個元素的子字符串。當兩個字符串中姓完全相等時,它再比較兩個名。這樣就形成了一個先按姓進行排序,在姓相同的情況下,再按名字進行排序的樹型映射。通過程序的輸出中RalphSmith出現在Tom Smith之前的結果可以看到這一點。

    參照:http://www.linuxmine.com/43849.html
    posted on 2007-06-25 10:56 ★yesjoy★ 閱讀(7915) 評論(0)  編輯  收藏 所屬分類: java.util包

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 激情吃奶吻胸免费视频xxxx| 在线免费观看h片| 亚洲成a人片在线观看久| 在线观看肉片AV网站免费| 亚洲人成毛片线播放| 亚洲国产高清在线一区二区三区| 野花香在线视频免费观看大全| 亚洲国产情侣一区二区三区| 免费中文字幕不卡视频| 5g影院5g天天爽永久免费影院| 亚洲av日韩av永久无码电影| 亚洲成a人片在线观看无码 | 亚洲av无码无线在线观看| 亚洲成人影院在线观看| 亚洲一区二区三区免费在线观看| 国产AV日韩A∨亚洲AV电影| 久久亚洲AV成人无码国产| 免费一级国产生活片| 亚洲国产精品免费在线观看| 日韩在线观看视频免费| 日韩亚洲不卡在线视频中文字幕在线观看 | 亚洲剧场午夜在线观看| 亚洲日韩在线中文字幕第一页| 思思re热免费精品视频66| 一级一看免费完整版毛片| 国产精品亚洲片在线va| 亚洲成色在线综合网站 | 久久精品国产亚洲| 亚洲成AV人在线观看网址| 久久99九九国产免费看小说| 中文精品人人永久免费 | 99久久人妻精品免费二区| 香蕉视频在线观看免费| 亚洲一区二区三区在线网站| 日本红怡院亚洲红怡院最新| 免费大片在线观看网站| 成人免费无码大片A毛片抽搐色欲| 日本黄色动图免费在线观看| 一个人看的免费观看日本视频www| 亚洲精品国产国语| 亚洲精品国产成人中文|