comparator接口與Comparable接口的區別

1. Comparator 和 Comparable 相同的地方他們都是java的一個接口, 而且是用來對自定義的class比較大小的,什麼是自定義class: 如 public class Person{ String name; int age }.當咱們有這麼一個personList,裏面包含了person1, person2, persion3....., 咱們用Collections.sort( personList ), 是得不到預期的結果的. 這時確定有人要問, 那爲何能夠排序一個字符串list呢:如 StringList{"hello1" , "hello3" , "hello2"}, Collections.sort( stringList ) 可以獲得正確的排序, 那是由於 String 這個對象已經幫咱們實現了 Comparable接口 , 因此咱們的 Person 若是想排序, 也要實現一個比較器。   2. Comparator 和 Comparable 的區別ComparableComparable 定義在 Person類的內部:public class Persion implements Comparable {..比較Person的大小..}, 由於已經實現了比較器,那麼咱們的Person如今是一個能夠比較大小的對象了,它的比較功能和String徹底同樣,能夠隨時隨地的拿來比較大小,由於Person如今自身就是有大小之分的。Collections.sort(personList)能夠獲得正確的結果。ComparatorComparator 是定義在Person的外部的, 此時咱們的Person類的結構不須要有任何變化,如public class Person{ String name; int age },而後咱們另外定義一個比較器:public PersonComparator implements Comparator() {..比較Person的大小..},在PersonComparator裏面實現了怎麼比較兩個Person的大小. 因此,用這種方法,當咱們要對一個 personList進行排序的時候, 咱們除了了要傳遞personList過去, 還須要把PersonComparator傳遞過去,由於怎麼比較Person的大小是在PersonComparator裏面實現的, 如:Collections.sort( personList , new PersonComparator() ).3. Comparator 和 Comparable 的實例Comparable:實現Comparable接口要覆蓋compareTo方法, 在compareTo方法裏面實現比較:public class Person implements Comparable {     String name;     int age     public int compareTo(Person another) {          int i = 0;          i = name.compareTo(another.name); // 使用字符串的比較          if(i == 0) { // 若是名字同樣,比較年齡, 返回比較年齡結果               return age - another.age;          } else {               return i; // 名字不同, 返回比較名字的結果.          }     }}   這時咱們能夠直接用 Collections.sort( personList ) 對其排序了.Comparator:實現Comparator須要覆蓋 compare 方法:public class Person{     String name;     int age}class PersonComparator implements Comparator {      public int compare(Person one, Person another) {          int i = 0;          i = one.name.compareTo(another.name); // 使用字符串的比較          if(i == 0) { // 若是名字同樣,比較年齡,返回比較年齡結果               return one.age - another.age;          } else {               return i; // 名字不同, 返回比較名字的結果.          }     }}   Collections.sort( personList , new PersonComparator()) 能夠對其排序 4:總結兩種方法各有優劣, 用Comparable 簡單, 只要實現Comparable 接口的對象直接就成爲一個能夠比較的對象,可是須要修改源代碼, 用Comparator 的好處是不須要修改源代碼, 而是另外實現一個比較器, 當某個自定義的對象須要做比較的時候,把比較器和對象一塊兒傳遞過去就能夠比大小了, 而且在Comparator 裏面用戶能夠自己實現複雜的能夠通用的邏輯,使其能夠匹配一些比較簡單的對象,那樣就能夠節省不少重複勞動了。
相關文章
相關標籤/搜索