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

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

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

    隨筆 - 147  文章 - 71  trackbacks - 0
    <2009年10月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類(146)

    隨筆檔案(147)

    文章分類(28)

    文章檔案(28)

    喜歡的Blog

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    當需要排序的集合或數組不是單純的數字型時,通常可以使用Comparator或Comparable,以簡單的方式實現對象排序或自定義排序。

    一、Comparator

    強行對某個對象collection進行整體排序的比較函數,可以將Comparator傳遞給Collections.sort或Arrays.sort。

    接口方法:

      /**
       * 
    @return o1小于、等于或大于o2,分別返回負整數、零或正整數。
       
    */
      
    int compare(Object o1, Object o2);

    案例:

    import java.util.Arrays;
    import java.util.Comparator;

    public class SampleComparator implements Comparator {

      
    public int compare(Object o1, Object o2) {
        
    return toInt(o1) - toInt(o2);
      }

      
    private int toInt(Object o) {
        String str 
    = (String) o;
        str 
    = str.replaceAll("""1");
        str 
    = str.replaceAll("""2");
        str 
    = str.replaceAll("""3");
        
    // 
        return Integer.parseInt(str);
      }

      
    /**
       * 測試方法
       
    */
      
    public static void main(String[] args) {
        String[] array 
    = new String[] { """""" };
        Arrays.sort(array, 
    new SampleComparator());
        
    for (int i = 0; i < array.length; i++) {
          System.out.println(array[i]);
        }
      }

    }

     二、Comparable

    強行對實現它的每個類的對象進行整體排序,實現此接口的對象列表(和數組)可以通過Collections.sort或Arrays.sort進行自動排序。

    接口方法:

      /**
       * 
    @return 該對象小于、等于或大于指定對象o,分別返回負整數、零或正整數。 
       
    */
      
    int compareTo(Object o);

    假設對象User,需要按年齡排序:

    public class User {

      
    private String id;
      
    private int age;

      
    public User(String id, int age) {
        
    this.id = id;
        
    this.age = age;
      }

      
    public int getAge() {
        
    return age;
      }

      
    public void setAge(int age) {
        
    this.age = age;
      }

      
    public String getId() {
        
    return id;
      }

      
    public void setId(String id) {
        
    this.id = id;
      }

    }

    改造后的對象:

    import java.util.Arrays;

    public class User implements Comparable {

      
    private String id;
      
    private int age;

      
    public User(String id, int age) {
        
    this.id = id;
        
    this.age = age;
      }

      
    public int getAge() {
        
    return age;
      }

      
    public void setAge(int age) {
        
    this.age = age;
      }

      
    public String getId() {
        
    return id;
      }

      
    public void setId(String id) {
        
    this.id = id;
      }

      
    public int compareTo(Object o) {
        
    return this.age - ((User) o).getAge();
      }

      
    /**
       * 測試方法
       
    */
      
    public static void main(String[] args) {
        User[] users 
    = new User[] { new User("a"30), new User("b"20) };
        Arrays.sort(users);
        
    for (int i = 0; i < users.length; i++) {
          User user 
    = users[i];
          System.out.println(user.getId() 
    + " " + user.getAge());
        }
      }

    }


    三、Comparator和Comparable的區別

    先看一下使用Comparator對User集合實現排序的方式:

    import java.util.Arrays;
    import java.util.Comparator;

    public class UserComparator implements Comparator {

      
    public int compare(Object o1, Object o2) {
        
    return ((User) o1).getAge() - ((User) o2).getAge();
      }

      
    /**
       * 測試方法
       
    */
      
    public static void main(String[] args) {
        User[] users 
    = new User[] { new User("a"30), new User("b"20) };
        Arrays.sort(users, 
    new UserComparator());
        
    for (int i = 0; i < users.length; i++) {
          User user 
    = users[i];
          System.out.println(user.getId() 
    + " " + user.getAge());
        }
      }

    }

    一個類實現了Camparable接口則表明這個類的對象之間是可以相互比較的,這個類對象組成的集合就可以直接使用sort方法排序。
    Comparator可以看成一種算法的實現,將算法和數據分離,Comparator也可以在下面兩種環境下使用:
    1、類的設計師沒有考慮到比較問題而沒有實現Comparable,可以通過Comparator來實現排序而不必改變對象本身
    2、可以使用多種排序標準,比如升序、降序等

    具體例程:http://m.tkk7.com/DreamAngel/archive/2009/09/26/296489.html

    posted on 2009-10-21 20:53 飛翔天使 閱讀(204) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 国产亚洲精品拍拍拍拍拍| 热99re久久精品精品免费| 亚洲一级片免费看| 又硬又粗又长又爽免费看 | 91精品免费国产高清在线| 亚洲AV成人片色在线观看| 久久国产乱子精品免费女| 亚洲激情在线视频| 777爽死你无码免费看一二区| 亚洲视频一区在线| 97在线观免费视频观看| 亚洲欧美中文日韩视频| 免费人妻无码不卡中文字幕18禁| 猫咪免费人成在线网站 | 全部免费国产潢色一级| 国产亚洲福利一区二区免费看| 免费va人成视频网站全| 国产美女视频免费观看的网站| 亚洲国产成人片在线观看无码 | 日韩欧美亚洲中文乱码| 免费大黄网站在线观| 香蕉免费在线视频| 亚洲激情黄色小说| 成年女人免费v片| 亚洲精品视频免费观看| 久久夜色精品国产噜噜噜亚洲AV| 久久国产免费福利永久| 亚洲第一成年网站视频| 亚洲精品无码av天堂| 97久久免费视频| 亚洲熟妇无码AV不卡在线播放 | 中国xxxxx高清免费看视频| 亚洲精品无码中文久久字幕| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 免费a级毛片无码av| 久久美女网站免费| 亚洲综合无码无在线观看| 亚洲午夜国产精品无码| 99久久99久久精品免费看蜜桃| 国产亚洲综合视频| 亚洲天堂一区二区|