隨筆-12  評論-6  文章-0  trackbacks-0
          Arrays.sort(T[], Comparator < ? super T > c) 方法用于對象數組按用戶自定義規則排序。
          Collections.sort(List<T>, Comparator < ? super T > c)方法用于對象集合按用戶自定義規則排序。

          Comparable用在對象本身,說明這個對象是可以被比較的,也就是說可以被排序的。(String和Integer之所以可以比較大小,是因為它們都實現了Comparable接口,并實現了compareTo()方法)。
          Compator用在對象外,相當于定義了一個排序算法。
          所以當對象本身實現了Comparable接口,那么Arrays.sort(T[])就可以了。同理Collections.sort(List<T>)就可以了。

          還是代碼來的直接:
          package com.zx.ww.comparable;

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

          public class ComparatorTest {
              
              
          public static void main(String[] args) {
                  Dog d1 
          = new Dog(2);
                  
                  Dog d2 
          = new Dog(1);
                  
                  Dog d3 
          = new Dog(3);
                  
                  Dog[] dogArray 
          = {d1, d2, d3};
                  
                  printDogs(dogArray);
                  
                  Arrays.sort(dogArray, 
          new DogSizeComparator());
                  
                  printDogs(dogArray);
              }
              
              
          public static void printDogs(Dog[] dogArray) {
                  
          for (Dog dog : dogArray) {
                      System.out.print(dog.size
          +" ");
                  }
                  System.out.println();
              }

          }

          class Dog{
              
          int size;
              
          public Dog(int size) {
                  
          this.size = size;
              }
          }

          class DogSizeComparator implements Comparator<Dog> {
              @Override
              
          public int compare(Dog dog1, Dog dog2) {
                  
          // TODO Auto-generated method stub
                  return dog1.size - dog2.size;
              }
          }
          輸出結果:
          2 1 3 
          1 2 3
          這是對象數組用了Comparator的結果。

          下面看對象自身實現了Comparable接口的方式:
          /**
           * 
           
          */
          package com.zx.ww.comparable;

          import java.util.Arrays;

          /**
           * 
          @author wuwei
           * 2014年9月29日
           
          */
          public class User implements Comparable<Object>{

              
          private int id;
              
              
          private String name;
              
              
          private int age;
              
              
          public User(int id, String name, int age) {
                  
          this.id = id;
                  
          this.name = name;
                  
          this.age = age;
              }
              
              
              
              
          public int getId() {
                  
          return id;
              }



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



              
          public String getName() {
                  
          return name;
              }



              
          public void setName(String name) {
                  
          this.name = name;
              }



              
          public int getAge() {
                  
          return age;
              }



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


              @Override
              
          public int compareTo(Object o) {
                  
          // TODO Auto-generated method stub
                  return this.age - ((User)o).getAge();
              }
              
              
          public static void main(String[] args) {
                  User[] users 
          = new User[] {new User(1,"zhangsan",28), new User(2,"lisi",25)};
                  Arrays.sort(users);
                  
          for (int i = 0; i < users.length; i++) {
                      User user 
          = users[i];
                      System.out.println(user.getId()
          +" "+user.getAge());
                  }
              }
              
          }
          輸出結果:
          2 25
          1 28
          上述都是Arrays.sort()的應用方式,同理Collections.sort()一樣的實現,代碼如下,比較簡單:
          package com.zx.ww.comparable;

          import java.util.ArrayList;
          import java.util.Collections;
          import java.util.Comparator;
          import java.util.List;

          public class CollectionSortTest {

              
          public static void main(String[] args) {
                  List
          <String> list = new ArrayList<String>();
                  list.add(
          "ac");
                  list.add(
          "ab");
                  list.add(
          "aa");
                  list.add(
          "db");
                  list.add(
          "ca");
                  
                  
          for (String string : list) {
                      System.out.print(string 
          + " ");
                  }
                  System.out.println();
                  Collections.sort(list);
                  
                  
          for (String string : list) {
                      System.out.print(string 
          + " ");
                  }
                  System.out.println();
                  
                  
          //對象A自身實現Comparable接口
                  List<A> aList = new ArrayList<A>();
                  aList.add(
          new A("wuwei"1));
                  aList.add(
          new A("zhangsan"3));
                  aList.add(
          new A("lisi"2));
                  
          for (A a : aList) {
                      System.out.print(a
          +" ");
                  }
                  System.out.println();
                  Collections.sort(aList);
                  
          for (A a : aList) {
                      System.out.print(a
          +" ");
                  }
                  System.out.println();
                  
                  
          //重寫Conparator接口方法
                  List<B> bList = new ArrayList<B>();
                  bList.add(
          new B("wuwei"1));
                  bList.add(
          new B("zhangsan"3));
                  bList.add(
          new B("lisi"2));
                  
          for (B b : bList) {
                      System.out.print(b
          +" ");
                  }
                  System.out.println();
                  Collections.sort(bList, 
          new Comparator<B>() {

                      @Override
                      
          public int compare(B b1, B b2) {
                          
          // TODO Auto-generated method stub
                          return b1.getCount().compareTo(b2.getCount());
                      }
                  });
                  
          for (B b : bList) {
                      System.out.print(b
          +" ");
                  }
                  System.out.println();
                  
              }
              
              
          }

          //對象A自身實現Comparable接口
          class A implements Comparable<A>{

              
          private String name;
              
              
          private Integer order;
              
              
          public A(String name, Integer order) {
                  
          this.name = name;
                  
          this.order = order;
              }
              
              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }

              
          public Integer getOrder() {
                  
          return order;
              }

              
          public void setOrder(Integer order) {
                  
          this.order = order;
              }

              
          public String toString() {
                  
          return "name is " +name+" order is "+order;
              }
              
              @Override
              
          public int compareTo(A o) {
                  
          // TODO Auto-generated method stub
                  return this.order.compareTo(o.getOrder());
              }
              
          }

          class B{
              
          private String name;
              
              
          private Integer count;
              
              
          public B(String name, Integer count) {
                  
          this.name = name;
                  
          this.count = count;
              }

              
          public String getName() {
                  
          return name;
              }

              
          public void setName(String name) {
                  
          this.name = name;
              }

              
          public Integer getCount() {
                  
          return count;
              }

              
          public void setCount(Integer count) {
                  
          this.count = count;
              }
              
              
          public String toString() {
                  
          return "name is "+name+" count is "+count;
              }
          }
          輸出結果:
          ac ab aa db ca 
          aa ab ac ca db 
          name is wuwei order is 
          1 name is zhangsan order is 3 name is lisi order is 2 
          name is wuwei order is 
          1 name is lisi order is 2 name is zhangsan order is 3 
          name is wuwei count is 
          1 name is zhangsan count is 3 name is lisi count is 2 
          name is wuwei count is 
          1 name is lisi count is 2 name is zhangsan count is 3








          posted on 2014-09-29 16:08 小人物_Amor 閱讀(1109) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 古田县| 五寨县| 沧州市| 衡阳县| 哈巴河县| 布尔津县| 互助| 静宁县| 文登市| 遂昌县| 新竹市| 涟水县| 贵德县| 万荣县| 屏东县| 万全县| 吉木萨尔县| 大邑县| 弥勒县| 望谟县| 长岛县| 湘阴县| 昌乐县| 平舆县| 奉化市| 衡水市| 乌海市| 汉沽区| 尚志市| 英德市| 井陉县| 丹棱县| 来凤县| 德格县| 温泉县| 新河县| 黎川县| 读书| 辛集市| 城固县| 绍兴市|