<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 是通用的接口,用戶可以實(shí)現(xiàn)它來(lái)完成自己特定的比較,而 Comparator 可以看成一種算法的實(shí)現(xiàn),在需要容器集合實(shí)現(xiàn)比較功能的時(shí)候,來(lái)指定這個(gè)比較器,這可以看成一種設(shè)計(jì)模式,將算法和數(shù)據(jù)分離。你選擇咖啡還是奶茶
    前者應(yīng)該比較固定,和一個(gè)具體類相綁定,而后者比較靈活,它可以被用于各個(gè)需要比較功能的類使用。
    一個(gè)類實(shí)現(xiàn)了 Camparable 接口表明這個(gè)類的對(duì)象之間是可以相互比較的。如果用數(shù)學(xué)語(yǔ)言描述的話就是這個(gè)類的對(duì)象組成的集合中存在一個(gè)全序。這樣,這個(gè)類對(duì)象組成的集合就可以使用 Sort 方法排序了。
    而 Comparator 的作用有兩個(gè):
    1 、如果類的設(shè)計(jì)師沒(méi)有考慮到 Compare 的問(wèn)題而沒(méi)有實(shí)現(xiàn) Comparable 接口,可以通過(guò) Comparator 來(lái)實(shí)現(xiàn)比較算法進(jìn)行排序;
    2 、為了使用不同的排序標(biāo)準(zhǔn)做準(zhǔn)備,比如:升序、降序或其他什么序。
    2 Comparable 接口
    public interface Comparable<T> {
        public int compareTo(T o);
    }
    java.lang. Comparable 接口定義類的自然順序,實(shí)現(xiàn)該接口的類就可以按這種方式排序。  
    1 ) int compareTo(Object o): 比較當(dāng)前實(shí)例對(duì)象與對(duì)象 o ,如果位于對(duì)象 o 之前,返回負(fù)值,如果兩個(gè)對(duì)象在排序中位置相同,則返回 0 ,如果位于對(duì)象 o 后面,則返回正值。
     
    2 )在 Java 2 SDK 版本 1.4 中有二十四個(gè)類實(shí)現(xiàn) Comparable 接口。下表展示了 8 種基本類型的自然排序。雖然一些類共享同一種自然排序,但只有相互可比的類才能排序。
    排序
    BigDecimal,BigInteger,Byte,Double, Float,Integer,Long,Short
    按數(shù)字大小排序
    Character
    按 Unicode 值的數(shù)字大小排序
    String
    按字符串中字符 Unicode 值排序
    利用 Comparable 接口創(chuàng)建自己的類的排序順序,只是實(shí)現(xiàn) compareTo() 方法的問(wèn)題。通常就是依賴幾個(gè)數(shù)據(jù)成員的自然排序。同時(shí)類也應(yīng)該覆蓋 equals() 和 hashCode() 以確保兩個(gè)相等的對(duì)象返回同一個(gè)哈希碼。
    這個(gè)接口的作用:如果數(shù)組或者集合中的(類)元素實(shí)現(xiàn)了該接口的話 , 我們就可以調(diào)用 Collections.sort 和 Arrays.sort 排序,或應(yīng)用于有序集合 TreeSet 和 TreeMap 中。
    下面設(shè)計(jì)一個(gè)有序的類 Person ,它實(shí)現(xiàn) Comparable 接口,以年齡為第一關(guān)鍵字,姓名為第二關(guān)鍵字升序排序。
    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 測(cè)試 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));
        }
    }
    結(jié)果:
    [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 測(cè)試 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));
        }
    }
    結(jié)果:
    [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 測(cè)試 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);
        }
    }
    結(jié)果:
    [20{Ada}, 20{Bush}, 20{Jeff}, 20{Tom}, 30{Mary}, 40{Walton}, 61{Peter}]
    2.4 測(cè)試 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);
        }
    }
    結(jié)果:
    {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) 評(píng)論(1)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    人人游戲網(wǎng) 軟件開(kāi)發(fā)網(wǎng) 貨運(yùn)專家
    主站蜘蛛池模板: 亚洲精品国产品国语在线| 亚洲jjzzjjzz在线观看| 日本高清不卡aⅴ免费网站| 亚洲午夜国产精品无码| 在线观看免费无码专区| 亚洲国产日韩在线| 全亚洲最新黄色特级网站| 中文字幕免费在线播放| 亚洲国色天香视频| 国产免费av片在线无码免费看| aa级毛片毛片免费观看久| 中文字幕人成无码免费视频| 亚洲欧洲日产国码在线观看| 美女视频黄a视频全免费网站色窝| 亚洲国产精品一区| 免费看美女被靠到爽的视频| 大地影院MV在线观看视频免费 | 西西人体大胆免费视频| 亚洲女初尝黑人巨高清| 国产高清视频在线免费观看| 女人体1963午夜免费视频| 亚洲1区2区3区精华液| 亚洲av日韩av无码黑人| 四虎国产精品免费久久影院| 国产免费拔擦拔擦8X高清在线人| 自拍日韩亚洲一区在线| 丁香五月亚洲综合深深爱| 全部免费国产潢色一级| 性做久久久久久免费观看| 99re在线这里只有精品免费| 日本一区二区三区在线视频观看免费| 亚洲成人一级电影| 91亚洲国产在人线播放午夜| 久久久久久久亚洲精品| 免费欧洲毛片A级视频无风险| 很黄很色很刺激的视频免费| 6080午夜一级毛片免费看6080夜福利| 国产精品偷伦视频免费观看了| 一级日本高清视频免费观看| 人妻无码中文字幕免费视频蜜桃| 亚洲精品宾馆在线精品酒店|