乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java之美[從菜鳥到高手演練]之Comparator和Comparable在排序中的應(yīng)用

       Pakin 2015-08-25

      當(dāng)需要排序的集合或數(shù)組不是單純的數(shù)字型時,通??梢允褂肅omparator或Comparable,以簡單的方式實(shí)現(xiàn)對象排序或自定義排序。


      一、Comparator

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

      接口方法:

      1. /** 
      2.   * @return o1小于、等于或大于o2,分別返回負(fù)整數(shù)、零或正整數(shù)。 
      3.   */  
      4.  int compare(Object o1, Object o2);  


      例子:

      1. import java.util.Arrays;  
      2. import java.util.Comparator;  
      3.   
      4. public class SampleComparator implements Comparator {  
      5.   
      6.   public int compare(Object o1, Object o2) {  
      7.     return toInt(o1) - toInt(o2);  
      8.   }  
      9.   
      10.   private int toInt(Object o) {  
      11.     String str = (String) o;  
      12.     str = str.replaceAll("一", "1");  
      13.     str = str.replaceAll("二", "2");  
      14.     str = str.replaceAll("三", "3");  
      15.     //   
      16.     return Integer.parseInt(str);  
      17.   }  
      18.   
      19.   /** 
      20.    * 測試方法 
      21.    */  
      22.   public static void main(String[] args) {  
      23.     String[] array = new String[] { "一二", "三", "二" };  
      24.     Arrays.sort(array, new SampleComparator());  
      25.     for (int i = 0; i < array.length; i++) {  
      26.       System.out.println(array[i]);  
      27.     }  
      28.   }  
      29.   
      30. }  

      二、Comparable

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

      接口方法:

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


      假設(shè)對象User,需要按年齡排序:

      1. public class User {  
      2.   
      3.   private String id;  
      4.   private int age;  
      5.   
      6.   public User(String id, int age) {  
      7.     this.id = id;  
      8.     this.age = age;  
      9.   }  
      10.   
      11.   public int getAge() {  
      12.     return age;  
      13.   }  
      14.   
      15.   public void setAge(int age) {  
      16.     this.age = age;  
      17.   }  
      18.   
      19.   public String getId() {  
      20.     return id;  
      21.   }  
      22.   
      23.   public void setId(String id) {  
      24.     this.id = id;  
      25.   }  
      26.   
      27. }  

      改造后的對象:

      1. import java.util.Arrays;  
      2.   
      3. public class User implements Comparable {  
      4.   
      5.   private String id;  
      6.   private int age;  
      7.   
      8.   public User(String id, int age) {  
      9.     this.id = id;  
      10.     this.age = age;  
      11.   }  
      12.   
      13.   public int getAge() {  
      14.     return age;  
      15.   }  
      16.   
      17.   public void setAge(int age) {  
      18.     this.age = age;  
      19.   }  
      20.   
      21.   public String getId() {  
      22.     return id;  
      23.   }  
      24.   
      25.   public void setId(String id) {  
      26.     this.id = id;  
      27.   }  
      28.   
      29.   public int compareTo(Object o) {  
      30.     return this.age - ((User) o).getAge();  
      31.   }  
      32.   
      33.   /** 
      34.    * 測試方法 
      35.    */  
      36.   public static void main(String[] args) {  
      37.     User[] users = new User[] { new User("a", 30), new User("b", 20) };  
      38.     Arrays.sort(users);  
      39.     for (int i = 0; i < users.length; i++) {  
      40.       User user = users[i];  
      41.       System.out.println(user.getId() + " " + user.getAge());  
      42.     }  
      43.   }  
      44.   
      45. }  

      三、Comparator和Comparable的區(qū)別

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

      1. import java.util.Arrays;  
      2. import java.util.Comparator;  
      3.   
      4. public class UserComparator implements Comparator {  
      5.   
      6.   public int compare(Object o1, Object o2) {  
      7.     return ((User) o1).getAge() - ((User) o2).getAge();  
      8.   }  
      9.   
      10.   /** 
      11.    * 測試方法 
      12.    */  
      13.   public static void main(String[] args) {  
      14.     User[] users = new User[] { new User("a", 30), new User("b", 20) };  
      15.     Arrays.sort(users, new UserComparator());  
      16.     for (int i = 0; i < users.length; i++) {  
      17.       User user = users[i];  
      18.       System.out.println(user.getId() + " " + user.getAge());  
      19.     }  
      20.   }  
      21.   
      22. }  


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


        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多