亚洲色蝴蝶中文娱乐网,在线亚洲欧美一区二区中文字幕,无人视频在线观看视频高清视频,99午夜国产精品一区二区,人人妻人人爽人人狠狠

接口 java的comparator接口與Comparable接口的區(qū)別和相似點

時間:2020-01-11 11:46:55 類型:JAVA
字號:    

  Comparator 和 Comparable 相同的地方

  他們都是java的一個接口, 并且是用來對自定義的class比較大小的,

  什么是自定義class: 如 public class Person{ String name; int age }.

  當我們有這么一個personList,里面包含了person1, person2, persion3….., 我們用Collections.sort( personList ), 是得不到預(yù)期的結(jié)果的. 這時肯定有人要問, 那為什么可以排序一個字符串list呢:

  如 StringList{“hello1” , “hello3” , “hello2”}, CollecTIons.sort( stringList ) 能夠得到正確的排序, 那是因為String 這個對象已經(jīng)幫我們實現(xiàn)了 Comparable接口 , 所以我們的 Person 如果想排序, 也要實現(xiàn)一個比較器。

  Comparable

  Comparable 定義在 Person類的內(nèi)部:

  public class Persion implements Comparable {..比較Person的大小..},

  因為已經(jīng)實現(xiàn)了比較器,那么我們的Person現(xiàn)在是一個可以比較大小的對象了,它的比較功能和String完全一樣,可以隨時隨地的拿來比較大小,因為Person現(xiàn)在自身就是有大小之分的。CollecTIons.sort(personList)可以得到正確的結(jié)果。

  Comparator

  Comparator 是定義在Person的外部的, 此時我們的Person類的結(jié)構(gòu)不需要有任何變化,如

  public class Person{ String name; int age },

  然后我們另外定義一個比較器:

  public PersonComparator implements Comparator() {..比較Person的大小..},

  在PersonComparator里面實現(xiàn)了怎么比較兩個Person的大小. 所以,用這種方法,當我們要對一個 personList進行排序的時候, 我們除了了要傳遞personList過去, 還需要把PersonComparator傳遞過去,因為怎么比較Person的大小是在PersonComparator 里面實現(xiàn)的, 如:

  CollecTIons.sort( personList , new PersonComparator() ).

  Comparator 和 Comparable 的實例

  Comparable:

  實現(xiàn)Comparable接口要覆蓋compareTo方法, 在compareTo方法里面實現(xiàn)比較:

  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) { // 如果名字一樣,比較年齡, 返回比較年齡結(jié)果

  return age - another.age;

  } else {

  return i; // 名字不一樣, 返回比較名字的結(jié)果.

  }

  }

  }

  這時我們可以直接用 CollecTIons.sort( personList ) 對其排序了.

  Comparator:

  實現(xiàn)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) { // 如果名字一樣,比較年齡,返回比較年齡結(jié)果

  return one.age - another.age;

  } else {

  return i; // 名字不一樣, 返回比較名字的結(jié)果.

  }

  }

  }

  Collections.sort( personList , new PersonComparator()) 可以對其排序

  4:總結(jié)

  兩種方法各有優(yōu)劣, 用Comparable 簡單, 只要實現(xiàn)Comparable 接口的對象直接就成為一個可以比較的對象, 但是需要修改源代碼, 用Comparator 的好處是不需要修改源代碼, 而是另外實現(xiàn)一個比較器, 當某個自定義 的對象需要作比較的時候,把比較器和對象一起傳遞過去就可以比大小了, 并且在Comparator 里面用戶可以自 己實現(xiàn)復(fù)雜的可以通用的邏輯,使其可以匹配一些比較簡單的對象,那樣就可以節(jié)省很多重復(fù)勞動了。


<