隨筆 - 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://www.aygfsteel.com/DreamAngel/archive/2009/09/26/296489.html

          posted on 2009-10-21 20:53 飛翔天使 閱讀(211) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 柘城县| 呼玛县| 集安市| 高青县| 巢湖市| 江川县| 河东区| 丹东市| 二连浩特市| 三河市| 乌拉特后旗| 扬中市| 襄城县| 洞口县| 黄山市| 安阳县| 莆田市| 秦皇岛市| 阿勒泰市| 德令哈市| 苍梧县| 东至县| 佳木斯市| 吉隆县| 七台河市| 湘西| 开封市| 西乡县| 新化县| 称多县| 威海市| 当雄县| 天津市| 泰来县| 五莲县| 云梦县| 上思县| 易门县| 普定县| 湘阴县| 常山县|