<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    The NoteBook of EricKong

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

    說到現在,讀者應該對Comparable接口有了大概的了解,但是為什么又要有一個Comparator接口呢?難道Java的開發者都吃飽撐著沒事做嗎?

    再談Comparator接口之前,大家應該先了解一個叫“策略模式”的東東。一下是百度百科對策略模式的描寫:

    策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨立于使用它的客戶而獨立變化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)

     

    之所以要談到策略模式,就是因為Comparator接口其實就是一種策略模式的實踐。實現Comparator接口的類必然就會實現一個compareTo(Object o1, Object o2)的方法,而這個方法就是算法中的一部分,所有使用了compareTo方法的類都不會關心compareTo是如何工作的,只關心他的返回值,這也是面向對象中著名的封裝特性。

    那Comparator接口應該如何使用呢?別急,首先我們要先對Person類進行一下處理,因為我們現在使用Comparator接口,所以Comparable接口就可以光榮的退休了:

       1: public class Person {
       2:  
       3:     private String name;
       4:     private int age;
       5:     
       6:     public Person() {
       7:         
       8:     }
       9:     
      10:     public Person(String name, int age) {
      11:         this.name = name;
      12:         this.age = age;
      13:     }
      14:  
      15:     public String getName() {
      16:         return name;
      17:     }
      18:  
      19:     public void setName(String name) {
      20:         this.name = name;
      21:     }
      22:  
      23:     public int getAge() {
      24:         return age;
      25:     }
      26:  
      27:     public void setAge(int age) {
      28:         this.age = age;
      29:     }
      30:  
      31:     @Override
      32:     public String toString() {
      33:         return "Person [age=" + age + ", name=" + name + "]";
      34:     }
      35:  
      36: }

    新建一個實現Comparator的實現類PersonComparator:

       1: import java.util.Comparator;
       2:  
       3: public class PersonComparator implements Comparator<Person> {
       4:  
       5:     @Override
       6:     public int compare(Person p1, Person p2) {
       7:         if (p1.getAge() > p2.getAge()) {
       8:             return 1;
       9:         } else if (p1.getAge() < p2.getAge()) {
      10:             return -1;
      11:         }
      12:         return 0;
      13:     }
      14:     
      15: }

    然后再用回我們的CompareTest做測試:

       1: import java.util.Arrays;
       2:  
       3: public class CompareTest {
       4:  
       5:     public static void main(String[] args) {
       6:         Person[] persons = {
       7:                 new Person("P1", 60),
       8:                 new Person("P2", 20),
       9:                 new Person("P3", 40)
      10:         };
      11:         
      12:         System.out.println(Arrays.toString(persons));
      13:         
      14:         Arrays.sort(persons, new PersonComparator());
      15:         
      16:         System.out.println(Arrays.toString(persons));
      17:     }
      18:  
      19: }

    注意:在上面的sort方法中,我們傳進了一個PersonComparator的實例對象作為參數,讀者也可以試試不傳入這個參數,看是否能正確工作。

    結果當然是跟上面演示的例子一樣啦,我就不再重復了。

    posted on 2011-04-12 12:26 Eric_jiang 閱讀(3586) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲丰满熟女一区二区哦| 一区二区免费在线观看| 国产免费av片在线播放| 国产高清视频免费在线观看| 久久精品亚洲精品国产色婷 | 少妇性饥渴无码A区免费| 久久精品国产亚洲AV香蕉| 在线观看无码的免费网站| 97在线免费视频| 亚洲性无码一区二区三区| 亚洲色偷偷偷鲁综合| 久久综合图区亚洲综合图区| a毛片免费播放全部完整| 亚洲最大成人网色香蕉| 曰批全过程免费视频在线观看| 日日狠狠久久偷偷色综合免费 | 韩国18福利视频免费观看| 久久国产乱子精品免费女| 久久水蜜桃亚洲AV无码精品| 久久精品国产亚洲av高清漫画| 国产三级免费电影| 6080午夜一级毛片免费看6080夜福利| 久久精品蜜芽亚洲国产AV| 亚洲毛片av日韩av无码| 毛片免费在线观看网站| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲国产成人VA在线观看| 亚洲电影在线免费观看| 久久久久久av无码免费看大片| 亚洲a∨无码精品色午夜| 亚洲福利视频一区二区三区| 国产亚洲AV夜间福利香蕉149| 在线jyzzjyzz免费视频| 亚洲精品免费在线观看| 精品一区二区三区高清免费观看| 亚洲s码欧洲m码吹潮| 亚洲人成人77777在线播放| 亚洲AV无一区二区三区久久| 亚洲日本va午夜中文字幕久久| 女人被免费视频网站| 国色精品卡一卡2卡3卡4卡免费|