隨筆-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
          主站蜘蛛池模板: 修文县| 宁海县| 揭阳市| 瑞金市| 齐齐哈尔市| 潢川县| 竹北市| 库尔勒市| 南康市| 长顺县| 手机| 福州市| 罗甸县| 万源市| 陇川县| 徐闻县| 沾益县| 利川市| 灵山县| 南澳县| 湖北省| 五大连池市| 枣庄市| 多伦县| 琼中| 河源市| 兴隆县| 江门市| 江都市| 宜川县| 桓台县| 伊金霍洛旗| 平利县| 广德县| 长武县| 华池县| 四子王旗| 南江县| 共和县| 彰化市| 岚皋县|