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

          常用鏈接

          留言簿(1)

          隨筆分類(146)

          隨筆檔案(147)

          文章分類(28)

          文章檔案(28)

          喜歡的Blog

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          當(dāng)需要排序的集合或數(shù)組不是單純的數(shù)字型時(shí),通常可以使用Comparator或Comparable,以簡(jiǎn)單的方式實(shí)現(xiàn)對(duì)象排序或自定義排序。

          一、Comparator

          強(qiáng)行對(duì)某個(gè)對(duì)象collection進(jìn)行整體排序的比較函數(shù),可以將Comparator傳遞給Collections.sort或Arrays.sort。

          接口方法:

            /**
             * 
          @return o1小于、等于或大于o2,分別返回負(fù)整數(shù)、零或正整數(shù)。
             
          */
            
          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);
            }

            
          /**
             * 測(cè)試方法
             
          */
            
          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

          強(qiáng)行對(duì)實(shí)現(xiàn)它的每個(gè)類的對(duì)象進(jìn)行整體排序,實(shí)現(xiàn)此接口的對(duì)象列表(和數(shù)組)可以通過(guò)Collections.sort或Arrays.sort進(jìn)行自動(dòng)排序。

          接口方法:

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

          假設(shè)對(duì)象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;
            }

          }

          改造后的對(duì)象:

          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();
            }

            
          /**
             * 測(cè)試方法
             
          */
            
          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的區(qū)別

          先看一下使用Comparator對(duì)User集合實(shí)現(xiàn)排序的方式:

          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();
            }

            
          /**
             * 測(cè)試方法
             
          */
            
          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());
              }
            }

          }

          一個(gè)類實(shí)現(xiàn)了Camparable接口則表明這個(gè)類的對(duì)象之間是可以相互比較的,這個(gè)類對(duì)象組成的集合就可以直接使用sort方法排序。
          Comparator可以看成一種算法的實(shí)現(xiàn),將算法和數(shù)據(jù)分離,Comparator也可以在下面兩種環(huán)境下使用:
          1、類的設(shè)計(jì)師沒(méi)有考慮到比較問(wèn)題而沒(méi)有實(shí)現(xiàn)Comparable,可以通過(guò)Comparator來(lái)實(shí)現(xiàn)排序而不必改變對(duì)象本身
          2、可以使用多種排序標(biāo)準(zhǔn),比如升序、降序等

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

          posted on 2009-10-21 20:53 飛翔天使 閱讀(205) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 玉树县| 都安| 晋中市| 达尔| 西昌市| 中阳县| 准格尔旗| 岳阳县| 且末县| 彭阳县| 兴业县| 通州区| 吉木乃县| 孝昌县| 龙胜| 乌鲁木齐县| 玉树县| 琼结县| 长乐市| 正安县| 敦化市| 同德县| 博爱县| 宜良县| 青龙| 光泽县| 蒲江县| 平泉县| 会东县| 景洪市| 抚顺县| 光泽县| 新沂市| 英德市| 三亚市| 桃江县| 固始县| 浦东新区| 奈曼旗| 尉犁县| 苍山县|