最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Java中comparator接口與Comparable接口的區(qū)別

 更新時間:2016年10月01日 15:11:28   作者:天盡頭的那片海  
本文要來詳細分析一下Java中Comparable和Comparator接口的區(qū)別,兩者都有比較的功能,那么究竟有什么區(qū)別呢,感興趣的Java開發(fā)者繼續(xù)看下去吧

Comparable 簡介

Comparable 是排序接口。

若一個類實現(xiàn)了Comparable接口,就意味著“該類支持排序”。  即然實現(xiàn)Comparable接口的類支持排序,假設現(xiàn)在存在“實現(xiàn)Comparable接口的類的對象的List列表(或數(shù)組)”,則該List列表(或數(shù)組)可以通過 Collections.sort(或 Arrays.sort)進行排序。

此外,“實現(xiàn)Comparable接口的類的對象”可以用作“有序映射(如TreeMap)”中的鍵或“有序集合(TreeSet)”中的元素,而不需要指定比較器。

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 這個對象已經(jīng)幫我們實現(xiàn)了 Comparable接口 , 所以我們的 Person 如果想排序, 也要實現(xiàn)一個比較器。

2. Comparator 和 Comparable 的區(qū)別

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)可以得到正確的結果。

Comparator

Comparator 是定義在Person的外部的, 此時我們的Person類的結構不需要有任何變化,如

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() ).

3. 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) { // 如果名字一樣,比較年齡, 返回比較年齡結果
return age - another.age;
} else {
return i; // 名字不一樣, 返回比較名字的結果.
}
}
}

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

Comparator:

實現(xiàn)Comparator需要覆蓋 compare 方法:

public class Person{
String name;
int age;
}
class PersonComparator implements Comparator<Person> { 
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:總結

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

相關文章

  • Java項目--家庭收支記錄程序

    Java項目--家庭收支記錄程序

    本文主要介紹Java基礎階段的一個小項目——家庭收支記錄程序(附完整源代碼),本項目所用到的主要知識點:基本語法、數(shù)組和方法。本項目并不難,主要是對Java初學者的基礎綜合運用的訓練及檢驗
    2021-07-07
  • springboot集成測試最小化依賴實踐示例

    springboot集成測試最小化依賴實踐示例

    這篇文章主要為大家介紹了springboot集成測試最小化依賴實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • springboot如何通過SSH連接遠程服務器

    springboot如何通過SSH連接遠程服務器

    這篇文章主要介紹了springboot如何通過SSH連接遠程服務器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Kafka消費客戶端協(xié)調(diào)器GroupCoordinator詳解

    Kafka消費客戶端協(xié)調(diào)器GroupCoordinator詳解

    這篇文章主要為大家介紹了Kafka消費客戶端協(xié)調(diào)器GroupCoordinator使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • SpringBoot集成Redisson實現(xiàn)延遲隊列的場景分析

    SpringBoot集成Redisson實現(xiàn)延遲隊列的場景分析

    這篇文章主要介紹了SpringBoot集成Redisson實現(xiàn)延遲隊列,本文通過場景分析實例代碼相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Spring Boot實現(xiàn)郵件發(fā)送功能

    Spring Boot實現(xiàn)郵件發(fā)送功能

    這篇文章主要為大家詳細介紹了Spring Boot實現(xiàn)郵件發(fā)送功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 深入理解JAVA 備忘錄模式

    深入理解JAVA 備忘錄模式

    這篇文章主要介紹了JAVA 備忘錄模式的的相關資料,文中示例代碼非常細致,供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • Java創(chuàng)建子線程的兩種方法

    Java創(chuàng)建子線程的兩種方法

    這篇文章主要介紹了Java創(chuàng)建子線程的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • SpringBoot整合高德地圖實現(xiàn)天氣預報功能

    SpringBoot整合高德地圖實現(xiàn)天氣預報功能

    在當今數(shù)字化時代,天氣預報功能在眾多應用中扮演著重要角色,通過整合高德地圖提供的天氣API,我們可以輕松地在自己的SpringBoot項目中實現(xiàn)這一功能,本文將詳細介紹如何在SpringBoot項目中整合高德地圖的天氣預報功能,感興趣的小伙伴跟著小編一起來看看吧
    2025-03-03
  • SpringBoot如何使用@Value取配置文件中的map配置

    SpringBoot如何使用@Value取配置文件中的map配置

    這篇文章主要介紹了SpringBoot如何使用@Value取配置文件中的map配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論

颍上县| 富宁县| 孟津县| 西乌| 兴文县| 即墨市| 浦北县| 仁寿县| 洪雅县| 阳西县| 五常市| 静海县| 酒泉市| 塔城市| 喀喇沁旗| 青岛市| 特克斯县| 高邮市| 林周县| 龙川县| 乌兰县| 武山县| 酒泉市| 大丰市| 普洱| 屯留县| 涪陵区| 蕲春县| 白城市| 福建省| 雷山县| 文化| 姜堰市| 灌云县| 玉田县| 开阳县| 霍州市| 新安县| 无为县| 威远县| 望城县|