国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java中Collections.sort()方法詳解

這篇具有很好參考價(jià)值的文章主要介紹了Java中Collections.sort()方法詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.介紹

Collections.sort()方法的參數(shù)為一個(gè)List集合,用于給集合進(jìn)行排序。
Collections.sort()內(nèi)部進(jìn)行了方法重載,可以只傳入一個(gè)List集合參數(shù),也可以傳入一個(gè)List集合參數(shù)和一個(gè)Comparator接口對(duì)象并實(shí)現(xiàn)其中的compare方法

2.Comparator接口下的compare方法

升序排列

 public static void main(String[] args) {
    Integer[] nums = new Integer[]{3, 7, 9, 2, 1};
    Arrays.sort(nums, new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o1 - o2;
        }
    });
    for (Integer i : nums) {
        System.out.print(i + "  ");  // 1 2 3 7 9
    }
}

降序排列

public static void main(String[] args) {
    Integer[] nums = new Integer[]{3, 7, 9, 2, 1};
    Arrays.sort(nums, new Comparator<Integer>() {

        @Override
        public int compare(Integer o1, Integer o2) {
            return o2 - o1;
        }
    });
    for (Integer i : nums) {
        System.out.print(i + "  ");9 7 3 2 1
    }
}

所以更多時(shí)候我們是直接記住了compare(int o1, int o2)方法 return o1 - o2 是升序,return o2 - o1 是降序。為什么會(huì)這樣寫呢?我們不妨看一下sort(T[] a, Comparator<? super T> c)方法

public static <T> void sort(T[] a, Comparator<? super T> c) {
    if (c == null) {
        sort(a);
    } else {
        if (LegacyMergeSort.userRequested)
            legacyMergeSort(a, c);
        else
            TimSort.sort(a, 0, a.length, c, null, 0, 0);
    }
}

可以看出他是進(jìn)去了else內(nèi),不妨先進(jìn)入legacyMergeSort看一下

private static <T> void legacyMergeSort(T[] a, Comparator<? super T> c) {
    T[] aux = a.clone();
    if (c==null)
        mergeSort(aux, a, 0, a.length, 0);
    else
        mergeSort(aux, a, 0, a.length, 0, c);
}


這里很明顯也是進(jìn)去了else內(nèi),繼續(xù)看mergeSort

private static void mergeSort(Object[] src,Object[] dest,int low, int high, int off,Comparator c) {
        int length = high - low;

        // Insertion sort on smallest arrays
        if (length < INSERTIONSORT_THRESHOLD) {
            for (int i=low; i<high; i++)
                for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
                    swap(dest, j, j-1);
            return;
        }

        // Recursively sort halves of dest into src
        int destLow  = low;
        int destHigh = high;
        low  += off;
        high += off;
        int mid = (low + high) >>> 1;
        mergeSort(dest, src, low, mid, -off, c);
        mergeSort(dest, src, mid, high, -off, c);

        // If list is already sorted, just copy from src to dest.  This is an
        // optimization that results in faster sorts for nearly ordered lists.
        if (c.compare(src[mid-1], src[mid]) <= 0) {
           System.arraycopy(src, low, dest, destLow, length);
           return;
        }

        // Merge sorted halves (now in src) into dest
        for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
            if (q >= high || p < mid && c.compare(src[p], src[q]) <= 0)
                dest[i] = src[p++];
            else
                dest[i] = src[q++];
        }
    }

這一段的代碼關(guān)鍵就是如下部分

if (length < INSERTIONSORT_THRESHOLD) {
    for (int i=low; i<high; i++)
        for (int j=i; j>low && c.compare(dest[j-1], dest[j])>0; j--)
            swap(dest, j, j-1);
    return;
}

可以看到這里面調(diào)用了compare方法,當(dāng)方法的返回值大于0的時(shí)候就將數(shù)組的前一個(gè)數(shù)和后一個(gè)數(shù)做交換。以升序?yàn)槔齺碇v解,升序的話compare方法就 return o1 - o2,那么就是 return dest[j-1] - dest[j]。

當(dāng) dest[j-1] > dest[j] 時(shí),就進(jìn)行交換。當(dāng) dest[j-1] <= dest[j] 時(shí)位置不變,從而達(dá)到數(shù)組升序。降序也是一樣的道理。文章來源地址http://www.zghlxwxcb.cn/news/detail-836476.html

到了這里,關(guān)于Java中Collections.sort()方法詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java Collections源碼剖析

    Collections以靜態(tài)方法的方式提供了很多通用算法和功能,這些功能大概可以分為以下兩類。 一類是對(duì)容器接口對(duì)象進(jìn)行操作,包括查找、排序、添加和修改。 另一類返回一個(gè)容器接口對(duì)象,適配器:將其他類型的數(shù)據(jù)轉(zhuǎn)換為容器接口對(duì)象+裝飾器:修飾一個(gè)給定容器接口對(duì)象

    2024年02月19日
    瀏覽(21)
  • 源碼解析Collections.sort ——從一個(gè)逃過單測(cè)的 bug 說起

    本文從一個(gè)小明寫的bug 開始,講bug的發(fā)現(xiàn)、排查定位,并由此展開對(duì)涉及的算法進(jìn)行圖解分析和源碼分析。 事情挺曲折的,因?yàn)樾∶鞯拇a是有單測(cè)的,讓小明更加篤定自己寫的沒問題。所以在排查的時(shí)候,也經(jīng)歷了前世的500年,去排查排序后的list改動(dòng)( 主要是小明和同事

    2024年02月16日
    瀏覽(20)
  • Java Collections類排序?qū)W習(xí)

    jdk自帶排序?qū)W習(xí),比如我們寫一個(gè)排序代碼 來看一下sort的實(shí)現(xiàn) 繼續(xù)跟進(jìn) 如果沒有自定義排序就執(zhí)行默認(rèn)排序 legacyMergeSort 歸并排序默認(rèn)關(guān)閉的,重點(diǎn)關(guān)注?ComparableTimSort.sort 如果小于 private static final int MIN_MERGE = 32;大小就進(jìn)行折半插入排序,如果大于32進(jìn)行 TimSort排序 Timsort是

    2024年01月23日
    瀏覽(19)
  • Java - 集合工具類Collections

    Java - 集合工具類Collections

    前言 二.collections提供的方法 ?三. 方法詳解 1.addAll:將所有指定元素添加到指定 collection 中。 可變參數(shù) ?添加方式 二.shuffle():隨機(jī)打亂List集合中的元素? 三.?sort():對(duì)List集合進(jìn)行排序; 實(shí)現(xiàn)compatator,重寫comapre方法,自定義比較規(guī)則 ?總結(jié) 大家好啊,又見面了,今天給大家講一

    2024年02月06日
    瀏覽(23)
  • Java中Collection與Collections有什么區(qū)別?Java常見面試題解析

    Java中Collection與Collections有什么區(qū)別?Java常見面試題解析

    本文將為大家詳細(xì)講解Java中Collection與Collections的區(qū)別點(diǎn),這是我們進(jìn)行開發(fā)時(shí)經(jīng)常用到的知識(shí)點(diǎn),也是大家在學(xué)習(xí)Java中很重要的一個(gè)知識(shí)點(diǎn),更是我們?cè)诿嬖嚂r(shí)有可能會(huì)問到的問題! 文章較長(zhǎng),干貨滿滿,建議大家收藏慢慢學(xué)習(xí)。文末有本文重點(diǎn)總結(jié),主頁有全系列文章分

    2024年02月06日
    瀏覽(18)
  • 【Java 21 新特性 】順序集合(Sequenced Collections)

    【Java 21 新特性 】順序集合(Sequenced Collections)

    Java 21 中增加了一種新的集合類型:順序集合(Sequenced Collections)。 要介紹順序集合,就首先要說明一下出現(xiàn)順序(encounter order)。出現(xiàn)順序指的是在遍歷一個(gè)集合時(shí),集合中元素的出現(xiàn)順序。 有些集合類型,有確定的出現(xiàn)順序,比如? List 。不管遍歷多少次這樣的集合,其

    2024年02月05日
    瀏覽(25)
  • Java 21新特性:Sequenced Collections(有序集合)

    在JDK 21中,Sequenced Collections的引入帶來了新的接口和方法來簡(jiǎn)化集合處理。此增強(qiáng)功能旨在解決訪問Java中各種集合類型的第一個(gè)和最后一個(gè)元素需要非統(tǒng)一且麻煩處理場(chǎng)景。 下面一起通過本文來了解一下不同集合處理示例。 Sequenced Collections引入了三個(gè)新接口: SequencedColle

    2024年02月08日
    瀏覽(19)
  • 【Java 21 新特性】順序集合(Sequenced Collections)

    【Java 21 新特性】順序集合(Sequenced Collections)

    引入新的接口表示具有定義的遇到順序的集合。每個(gè)這樣的集合都有一個(gè)明確定義的第一個(gè)元素、第二個(gè)元素,依此類推,直到最后一個(gè)元素。提供統(tǒng)一的API來訪問它的第一個(gè)和最后一個(gè)元素,并以相反的順序處理它的元素。 \\\"生活只能向后理解;但必須向前生活。\\\"—基爾克

    2024年02月03日
    瀏覽(20)
  • 【java學(xué)習(xí)—十】操作集合的工具類Collections(8)

    【java學(xué)習(xí)—十】操作集合的工具類Collections(8)

    ???? Collections 是一個(gè)操作 Set 、 List 和 Map 等集合的工具類 ???? Collections 中提供了大量方法對(duì)集合元素進(jìn)行排序、查詢和修改等操作,還提供了對(duì)集合對(duì)象設(shè)置不可變、對(duì)集合對(duì)象實(shí)現(xiàn)同步控制等方法。 ???? 排序操作: ????? reverse(List) :反轉(zhuǎn) List 中元素

    2024年02月06日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包