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

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

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

    posts - 241,  comments - 116,  trackbacks - 0
    1. 兩種比較接口分析
    在 “ 集合框架 ” 中有兩種比較接口: Comparable 接口和 Comparator 接口。 Comparable 是通用的接口,用戶可以實現它來完成自己特定的比較,而 Comparator 可以看成一種算法的實現,在需要容器集合實現比較功能的時候,來指定這個比較器,這可以看成一種設計模式,將算法和數據分離。你選擇咖啡還是奶茶
    前者應該比較固定,和一個具體類相綁定,而后者比較靈活,它可以被用于各個需要比較功能的類使用。
    一個類實現了 Camparable 接口表明這個類的對象之間是可以相互比較的。如果用數學語言描述的話就是這個類的對象組成的集合中存在一個全序。這樣,這個類對象組成的集合就可以使用 Sort 方法排序了。
    而 Comparator 的作用有兩個:
    1 、如果類的設計師沒有考慮到 Compare 的問題而沒有實現 Comparable 接口,可以通過 Comparator 來實現比較算法進行排序;
    2 、為了使用不同的排序標準做準備,比如:升序、降序或其他什么序。
    2 Comparable 接口
    public interface Comparable<T> {
        public int compareTo(T o);
    }
    java.lang. Comparable 接口定義類的自然順序,實現該接口的類就可以按這種方式排序。  
    1 ) int compareTo(Object o): 比較當前實例對象與對象 o ,如果位于對象 o 之前,返回負值,如果兩個對象在排序中位置相同,則返回 0 ,如果位于對象 o 后面,則返回正值。
     
    2 )在 Java 2 SDK 版本 1.4 中有二十四個類實現 Comparable 接口。下表展示了 8 種基本類型的自然排序。雖然一些類共享同一種自然排序,但只有相互可比的類才能排序。
    排序
    BigDecimal,BigInteger,Byte,Double, Float,Integer,Long,Short
    按數字大小排序
    Character
    按 Unicode 值的數字大小排序
    String
    按字符串中字符 Unicode 值排序
    利用 Comparable 接口創建自己的類的排序順序,只是實現 compareTo() 方法的問題。通常就是依賴幾個數據成員的自然排序。同時類也應該覆蓋 equals() 和 hashCode() 以確保兩個相等的對象返回同一個哈希碼。
    這個接口的作用:如果數組或者集合中的(類)元素實現了該接口的話 , 我們就可以調用 Collections.sort 和 Arrays.sort 排序,或應用于有序集合 TreeSet 和 TreeMap 中。
    下面設計一個有序的類 Person ,它實現 Comparable 接口,以年齡為第一關鍵字,姓名為第二關鍵字升序排序。
    Person.java
    package com.zj.sort.comparable;
     
    public class Person implements Comparable<Person> {
        private int age ;
        private String name ;
     
        public Person( int age, String name) {
           this . age = age;
           this . name = name;
        }
     
        public int compareTo(Person person) {
           int cop = age - person.getAge();
           if (cop != 0)
               return cop;
           else
               return name .compareTo(person. name );
        }
     
        public int getAge() {
           return age ;
        }
     
        public String getName() {
           return name ;
        }
     
        public int hashCode() {
           int result = 17;
           result = 37 * result + age ;
           result = 37 * result + name .hashCode();
           return result;
        }
     
        public boolean equals(Object o) {
           if (!(o instanceof Person))
               return false ;
           Person person = (Person) o;
           return ( age == person. age ) && ( name .equals(person. name ));
        }
     
        public String toString() {
           return ( age + "{" + name + "}" );
        }
    }
    2.1 測試 Arrays.sort ()方法
    ArraysSortUnit.java
    package com.zj.sort.comparable;
    import java.util.Arrays;
    import com.zj.compare.Person;
     
    public class ArraysSortUnit {
        public static void main(String[] args) {
           Person[] ps = { new Person(20, "Tom" ), new Person(20, "Jeff" ),
                  new Person(30, "Mary" ), new Person(20, "Ada" ),
                  new Person(40, "Walton" ), new Person(61, "Peter" ),
                  new Person(20, "Bush" ) };
           System. out .println(Arrays.toString (ps));
           Arrays.sort (ps);
           System. out .println(Arrays.toString (ps));
        }
    }
    結果:
    [20{Tom}, 20{Jeff}, 30{Mary}, 20{Ada}, 40{Walton}, 61{Peter}, 20{Bush}]
    [20{Ada}, 20{Bush}, 20{Jeff}, 20{Tom}, 30{Mary}, 40{Walton}, 61{Peter}]
    2.2 測試 Collections.sort ()方法
    CollctionsSortUnit.java
    package com.zj.sort.comparable;
    import java.util.Arrays;
    import java.util.Collections;
    import com.zj.compare.Person;
     
    public class CollctionsSortUnit {
        public static void main(String[] args) {
           Person[] ps = { new Person(20, "Tom" ), new Person(20, "Jeff" ),
                  new Person(30, "Mary" ), new Person(20, "Ada" ),
                   new Person(40, "Walton" ), new Person(61, "Peter" ),
                  new Person(20, "Bush" ) };
           System. out .println(Arrays.toString (ps));
           Collections.sort (Arrays.asList (ps));
           System. out .println(Arrays.toString (ps));
        }
    }
    結果:
    [20{Tom}, 20{Jeff}, 30{Mary}, 20{Ada}, 40{Walton}, 61{Peter}, 20{Bush}]
    [20{Ada}, 20{Bush}, 20{Jeff}, 20{Tom}, 30{Mary}, 40{Walton}, 61{Peter}]
    2.3 測試 TreeSet
    TreeSetUnit.java
    package com.zj.sort.comparable;
    import java.util.TreeSet;
    import com.zj.compare.Person;
     
    public class TreeSetUnit {
        public static void main(String[] args) {
           TreeSet<Person> set = new TreeSet<Person>();
           set.add( new Person(20, "Tom" ));
           set.add( new Person(20, "Jeff" ));
           set.add( new Person(30, "Mary" ));
           set.add( new Person(20, "Ada" ));
           set.add( new Person(40, "Walton" ));
           set.add( new Person(61, "Peter" ));
           set.add( new Person(20, "Bush" ));
           System. out .println(set);
        }
    }
    結果:
    [20{Ada}, 20{Bush}, 20{Jeff}, 20{Tom}, 30{Mary}, 40{Walton}, 61{Peter}]
    2.4 測試 TreeMap
    TreeMapUnit.java
    package com.zj.sort.comparable;
    import java.util.TreeMap;
    import com.zj.compare.Person;
     
    public class TreeMapUnit {
        public static void main(String[] args) {
           TreeMap<Person, String> map = new TreeMap<Person, String>();
           map.put( new Person(20, "Tom" ), "Tom" );
           map.put( new Person(20, "Jeff" ), "Jeff" );
           map.put( new Person(30, "Mary" ), "Mary" );
           map.put( new Person(20, "Ada" ), "Ada" );
           map.put( new Person(40, "Walton" ), "Walton" );
           map.put( new Person(61, "Peter" ), "Peter" );
           map.put( new Person(20, "Bush" ), "Bush" );
           System. out .println(map);
        }
    }
    結果:
    {20{Ada}=Ada, 20{Bush}=Bush, 20{Jeff}=Jeff, 20{Tom}=Tom, 30{Mary}=Mary, 40{Walton}=Walton, 61{Peter}=Peter}
    3. Comparator 接口
    public interface Comparator<T> {
        int compare(T o1, T o2);
        boolean
    posted on 2011-10-24 09:36 墻頭草 閱讀(8889) 評論(1)  編輯  收藏

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


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 亚洲熟妇无码另类久久久| 亚洲福利秒拍一区二区| 亚洲成色WWW久久网站| 青青青视频免费观看| 午夜精品一区二区三区免费视频| 亚洲中文字幕丝袜制服一区| 日韩在线观看免费| 国产精品亚洲精品日韩已方| 一级毛片大全免费播放下载| 国产亚洲精品激情都市| 免费毛片a线观看| www国产亚洲精品久久久日本| 日韩一级片免费观看| 亚洲精品乱码久久久久久久久久久久| 91亚洲精品麻豆| 女人18毛片免费观看| 在线看亚洲十八禁网站| 亚洲国产婷婷综合在线精品| 中国一级毛片免费看视频| 亚洲第一精品在线视频| 手机看黄av免费网址| 亚洲精品国产精品乱码不99| 久久久久免费精品国产| 亚洲一区二区三区在线观看蜜桃| 成人免费网站在线观看| 免费无码AV一区二区| 亚洲av午夜成人片精品网站| 免费观看激色视频网站bd| 亚洲第一AAAAA片| 国产91色综合久久免费| 亚洲a∨无码一区二区| 很黄很色很刺激的视频免费| 国产精品亚洲AV三区| 在线观看免费毛片| 精品一区二区三区免费观看 | japanese色国产在线看免费| 亚洲欧洲成人精品香蕉网| 国产免费网站看v片在线| 亚洲第一页中文字幕| 免费又黄又硬又爽大片| 亚洲AV综合色区无码一二三区|