国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java Comparator與Comparable辨析

wenhai.he / 1769人閱讀

摘要:與辨析聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處比較三種狀態(tài)根據(jù)需求定義序升序降序返回負(fù)數(shù),表示比較兩元素滿足序,無須調(diào)整,返回,表示比較兩元素相等,無須調(diào)整位置,返回正數(shù),表示比較兩元素不滿足序,按序調(diào)整位置對象內(nèi)部排序源碼繼承接口的對象必

Comparator與Comparable辨析 聲明

文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處:
[1] https://segmentfault.com/u/yzwall
[2] blog.csdn.net/j_dark/

比較三種狀態(tài)

根據(jù)需求定義“序”(升序 or 降序);

LESS_THAN: 返回負(fù)數(shù),表示比較兩元素滿足序,無須調(diào)整,;

EQUAL:返回0,表示比較兩元素“相等”,無須調(diào)整位置,;

GREATER_THAN:返回正數(shù),表示比較兩元素不滿足序,按序調(diào)整位置;

對象內(nèi)部排序:Comparable Comparable源碼
// full name: java.lang.Comparable
public interface Comparable {
    public int compareTo(T o);
}

繼承Comparable接口的對象必須重寫compareTo方法,實(shí)現(xiàn)對象內(nèi)部排序
目前所有的包裝類和String類都實(shí)現(xiàn)了Comparable接口;

Comparable實(shí)現(xiàn)示例
class Student implements Comparable{
    private static final int LESS_THAN =  -1;
    private static final int EQUAL =  0;
    private static final int GREATER_THAN =  1;
    int age;
    int id;
    
    ...
    @Override
    // 按照age升序排練,age相等按照id降序排練
    public int compareTo(Student o) {
        if (this.age < o.age) {
            return LESS_THAN;
        } 
        if (this.age ==  o.age) {
            return this.id > o.id ? LESS_THAN : (this.id == o.id) ? EQUAL : GREATER_THAN;
        } else {
            return GREATER_THAN;
        }
    }
    ...
}
根據(jù)Comparable排序

集合或數(shù)組元素實(shí)現(xiàn)Comparable接口,通過以下兩種方式實(shí)現(xiàn)排序:
集合排序Collections.sort(List list),底層調(diào)用Arrays.sort()實(shí)現(xiàn);
數(shù)組排序Arrays.sort(T[] arr)

對象外部排序:Comparator Comparator源碼
public interface Comparator {
    ...
    // 重寫compare比較規(guī)則,通過外部傳入實(shí)現(xiàn)自定義排序
    int compare(T o1, T o2);
}
Comparator實(shí)現(xiàn)示例
/**
 * 集合排序:Colletions.sort(list, new MyComparator());
 * 數(shù)組排序:Arrays.sort(arr, new MyComparator());
 */
class MyComparator implements Comparator {
    private static final int LESS_THAN =  -1;
    private static final int EQUAL =  0;
    private static final int GREATER_THAN =  1;
    
    @Override
    // 按照age降序排練,age相等按照id升序排練
    public int compare(Student a, Student b) {
        if (a.age > b.age) {
            return LESS_THAN;
        } 
        if (a.age ==  b.age) {
            return a.id < b.id ? LESS_THAN : (a.id == b.id) ? EQUAL : GREATER_THAN;
        } else {
            return GREATER_THAN;
        }
    }
}
根據(jù)Comparator排序

Comparator體現(xiàn)了策略設(shè)計模式,即不改變對象自身,而使用一個策略對象去改變它的行為。

集合或數(shù)組元素實(shí)現(xiàn)Comparator接口,通過以下兩種方式實(shí)現(xiàn)排序:
集合排序:Collections.sort(List list, new Comparator),底層調(diào)用Arrays.sort(T[] arr, Comparator c)實(shí)現(xiàn);
數(shù)組排序:Arrays.sort(T[] arr, Comparator c)

Comparator與Comparable辨析

ComparableComparator都是用于對集合或數(shù)組元素的排序比較,

Comparable面向?qū)ο螅瑢ο笾貙?b>compareTo方法即可在內(nèi)部完成比較,更改比較邏輯時只能更改對象自身(比如通過Comparable接口無法改變包裝類型和String類型的比較規(guī)則);

Comparator面向集合/數(shù)組,在外部自定義比較器實(shí)現(xiàn)接口,傳入集合/數(shù)組內(nèi)部提供比較,更改比較邏輯時只需更改自定義比較器,無須更改對象,應(yīng)用更廣泛

參考

[1] http://blog.csdn.net/mageshuai/article/details/3849143

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67000.html

相關(guān)文章

  • Java Comparable vs Comparator

    摘要:和方法可以對數(shù)組進(jìn)行排序,但是這種方法排序要求對象所在的類必須實(shí)現(xiàn)接口,此接口用于指定排序規(guī)則如果一個類已經(jīng)開發(fā)完成,但是在此類建立的初期并沒有實(shí)現(xiàn)接口,此時肯定是無法進(jìn)行對象排序操作的,所以為了解決這個問題,定義了另一個比較器的操 Collections.sort() 和 Arrays.sort()方法可以對Object數(shù)組進(jìn)行排序,但是這種方法排序要求對象所在的類必須實(shí)現(xiàn)Compa...

    KitorinZero 評論0 收藏0
  • java comparablecomparator

    摘要:一內(nèi)部排序接口實(shí)現(xiàn)該接口的類,支持自然排序內(nèi)排序。方法與方法不一致。在有序集合看來和是相等的,因此第個鍵無法被添加到集合中。 一、Comparable(內(nèi)部排序接口) 實(shí)現(xiàn)該接口的類,支持自然排序(內(nèi)排序)。Arrays.sort(Object[])和Collection.sort(Object[])要求對象必須實(shí)現(xiàn)Comparable接口 文檔中指出: 如果該對象大于指定對象,返回...

    why_rookie 評論0 收藏0
  • Java? 教程(對象排序)

    對象排序 List l可以如下排序。 Collections.sort(l); 如果List包含String元素,它將按字母順序排序,如果它由Date元素組成,它將按時間順序排序,這是怎么發(fā)生的?String和Date都實(shí)現(xiàn)了Comparable接口,Comparable實(shí)現(xiàn)為類提供了自然的順序,允許該類的對象自動排序,下表總結(jié)了一些實(shí)現(xiàn)Comparable的更重要的Java平臺類。 類 自然...

    Chao 評論0 收藏0
  • Comparable and Comparator

    摘要:中的一切類都是繼承于,在中實(shí)現(xiàn)了函數(shù)所以,其它所有的類也相當(dāng)于都實(shí)現(xiàn)了該函數(shù)。是比較和的大小。返回負(fù)數(shù),意味著比小返回零,意味著等于返回正數(shù),意味著大于。 Comparable Comparable 是排序接口。 Collection.sort() 和Arrays.sort()都支持可以排序?qū)崿F(xiàn)Comparable接口的類的對象的List列表(或數(shù)組) 換而言之, 如果數(shù)組或列表想支持...

    Barrior 評論0 收藏0
  • 如何理解java里的ComparatorComparable

    摘要:,又名比較器,是為了比較兩個對象的大小而抽象出的一個接口。在排序的時候常需要實(shí)現(xiàn)這個接口來定制比較規(guī)則。若函數(shù)的返回值大于,那么在排序后會將放在的后面。 Comparator,又名比較器,是為了比較兩個對象的大小而抽象出的一個接口。在排序的時候常需要實(shí)現(xiàn)這個接口來定制比較規(guī)則。 但是很多人用的時候不清楚該如何使用這個接口,下面我就講一下這個接口的正確使用方法!這個接口里有一個必須實(shí)現(xiàn)的...

    sydMobile 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<