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

資訊專欄INFORMATION COLUMN

Java Arrays.asList()與Arrays.sort()分析

pkhope / 2249人閱讀

摘要:與分析聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處示例源碼將數(shù)組或者指定個數(shù)的對象轉(zhuǎn)換為是的內(nèi)部類實例,與不是一回事,長度固定,只能遍歷訪問,不能使用修改集合相關(guān)的方法,比如方法會拋出異常適配器模式修改數(shù)組內(nèi)容后,內(nèi)容也會隨之改變,體現(xiàn)適配器模

Java Arrays.asList()與Arrays.sort()分析 聲明

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

Array.asList()
// 示例
int[] arr = new int[5];
List list = Arrays.asList(arr);

// Arrays.asList(a)源碼
public static  List asList(T... a) {
    return new ArrayList<>(a);
}

Arrays.asList(arr)將數(shù)組arr或者指定個數(shù)的對象轉(zhuǎn)換為listlistArrays的內(nèi)部類ArrayList實例(ArrayList<>(a)),與java.util.ArrayList不是一回事),長度固定,只能遍歷訪問,不能使用修改集合相關(guān)的方法,比如add/remove/clear方法會拋出UnsupportedOperationException異常;
適配器模式:修改數(shù)組arr內(nèi)容后,list內(nèi)容也會隨之改變,體現(xiàn)適配器模式(只轉(zhuǎn)換借款,后臺數(shù)據(jù)仍然是數(shù)組)

Arrays.sort() 針對基本數(shù)據(jù)類型:DualPivotQuickSort

針對基本數(shù)據(jù)類型,Array.sort()采用DualPivotQuickSort算法排序;

DualPivotQuickSort基本流程:

元素個數(shù):不超過插入排序閾值(默認(rèn)47),選用插入排序;

元素個數(shù):插入排序閾值-快排閾值(默認(rèn)286),選用DualPivotQuickSort

元素個數(shù):超過快排閾值,選用TimSort歸并排序;

DualPivotQuickSort性能

DualPivotQuickSort在經(jīng)典快排基礎(chǔ)上改進,時間復(fù)雜度穩(wěn)定為O(n logn)

針對Object類型和泛型:TimSort TimSort基本流程

用戶通過系統(tǒng)參數(shù)LegacyMergeSort.userRequested選定排序方式:

LegacyMergeSort.userRequested為TRUE,進行經(jīng)典二路歸并;

LegacyMergeSort.userRequested為FALSE,進行TimSort歸并排序;

TimSort性能

TimSort算法平均時間復(fù)雜度為O(n logn),最優(yōu)情況下為O(n)好于經(jīng)典歸并排序O(n logn),空間復(fù)雜度與經(jīng)典歸并排序一樣均為O(n)
因此在JDK1.8中,Java對對象和泛型使用TimSort的原因是:

TimSort性能穩(wěn)定,而快速排序不穩(wěn)定;

TimSort最優(yōu)情況下時間復(fù)雜度為O(n)好于經(jīng)典歸并排序O(n logn)

參考

[1] https://zongwenlong.github.io/2017/01/06/Java-SourceCode-Sort/

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

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

相關(guān)文章

  • Java 8 Stream并行流

    摘要:實際上,在并行流上使用新的方法。此外,我們了解到所有并行流操作共享相同的范圍。因此,您可能希望避免實施慢速阻塞流操作,因為這可能會減慢嚴(yán)重依賴并行流的應(yīng)用程序的其他部分。 流可以并行執(zhí)行,以增加大量輸入元素的運行時性能。并行流ForkJoinPool通過靜態(tài)ForkJoinPool.commonPool()方法使用公共可用的流。底層線程池的大小最多使用五個線程 - 具體取決于可用物理C...

    yzd 評論0 收藏0
  • Java Lambda表達式入門

    摘要:表達式還增強了集合庫。和前面的示例一樣先使用匿名內(nèi)部類來排序然后再使用表達式精簡我們的代碼。使用舊的方式代碼如下所示使用匿名內(nèi)部類根據(jù)排序使用可以通過下面的代碼實現(xiàn)同樣的功能使用排序也可以采用如下形式其他的排序如下所示。 本文轉(zhuǎn)自:http://blog.csdn.net/renfufei...轉(zhuǎn)載請注明出處 原文鏈接: Start Using Java Lambda Expressi...

    youkede 評論0 收藏0
  • Start Using Java Lambda Expressions(轉(zhuǎn)載)

    摘要:原文 Introduction (Business Case) Lambda expressions are a new and important feature included in Java SE 8. A lambda expression provides a way to represent one method interface using an expression...

    FullStackDeveloper 評論0 收藏0
  • Java 性能調(diào)優(yōu)指南之 Java 集合概覽

    摘要:單線程集合本部分將重點介紹非線程安全集合。非線程安全集合框架的最新成員是自起推出的。這是標(biāo)準(zhǔn)的單線程陣營中唯一的有序集合。該功能能有效防止運行時造型。檢查個集合之間不存在共同的元素。基于自然排序或找出集合中的最大或最小元素。 【編者按】本文作者為擁有十年金融軟件開發(fā)經(jīng)驗的 Mikhail Vorontsov,文章主要概覽了所有標(biāo)準(zhǔn) Java 集合類型。文章系國內(nèi) ITOM 管理平臺 O...

    gnehc 評論0 收藏0

發(fā)表評論

0條評論

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