摘要:與分析聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處示例源碼將數(shù)組或者指定個(gè)數(shù)的對(duì)象轉(zhuǎn)換為是的內(nèi)部類實(shí)例,與不是一回事,長(zhǎng)度固定,只能遍歷訪問(wèn),不能使用修改集合相關(guān)的方法,比如方法會(huì)拋出異常適配器模式修改數(shù)組內(nèi)容后,內(nèi)容也會(huì)隨之改變,體現(xiàn)適配器模
Java Arrays.asList()與Arrays.sort()分析 聲明
文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall
Array.asList()// 示例 int[] arr = new int[5]; Listlist = Arrays.asList(arr); // Arrays.asList(a)源碼 public static List asList(T... a) { return new ArrayList<>(a); }
Arrays.asList(arr)將數(shù)組arr或者指定個(gè)數(shù)的對(duì)象轉(zhuǎn)換為list;list是Arrays的內(nèi)部類ArrayList實(shí)例(ArrayList<>(a)),與java.util.ArrayList不是一回事),長(zhǎng)度固定,只能遍歷訪問(wèn),不能使用修改集合相關(guān)的方法,比如add/remove/clear方法會(huì)拋出UnsupportedOperationException異常;
適配器模式:修改數(shù)組arr內(nèi)容后,list內(nèi)容也會(huì)隨之改變,體現(xiàn)適配器模式(只轉(zhuǎn)換借款,后臺(tái)數(shù)據(jù)仍然是數(shù)組)
針對(duì)基本數(shù)據(jù)類型,Array.sort()采用DualPivotQuickSort算法排序;
DualPivotQuickSort基本流程:元素個(gè)數(shù):不超過(guò)插入排序閾值(默認(rèn)47),選用插入排序;
元素個(gè)數(shù):插入排序閾值-快排閾值(默認(rèn)286),選用DualPivotQuickSort
元素個(gè)數(shù):超過(guò)快排閾值,選用TimSort歸并排序;
DualPivotQuickSort性能DualPivotQuickSort在經(jīng)典快排基礎(chǔ)上改進(jìn),時(shí)間復(fù)雜度穩(wěn)定為O(n logn)
針對(duì)Object類型和泛型:TimSort TimSort基本流程用戶通過(guò)系統(tǒng)參數(shù)LegacyMergeSort.userRequested選定排序方式:
LegacyMergeSort.userRequested為T(mén)RUE,進(jìn)行經(jīng)典二路歸并;
LegacyMergeSort.userRequested為FALSE,進(jìn)行TimSort歸并排序;
TimSort性能TimSort算法平均時(shí)間復(fù)雜度為O(n logn),最優(yōu)情況下為O(n)好于經(jīng)典歸并排序O(n logn),空間復(fù)雜度與經(jīng)典歸并排序一樣均為O(n);
因此在JDK1.8中,Java對(duì)對(duì)象和泛型使用TimSort的原因是:
TimSort性能穩(wěn)定,而快速排序不穩(wěn)定;
TimSort最優(yōu)情況下時(shí)間復(fù)雜度為O(n)好于經(jīng)典歸并排序O(n logn)
參考[1] https://zongwenlong.github.io/2017/01/06/Java-SourceCode-Sort/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67078.html
摘要:實(shí)際上,在并行流上使用新的方法。此外,我們了解到所有并行流操作共享相同的范圍。因此,您可能希望避免實(shí)施慢速阻塞流操作,因?yàn)檫@可能會(huì)減慢嚴(yán)重依賴并行流的應(yīng)用程序的其他部分。 流可以并行執(zhí)行,以增加大量輸入元素的運(yùn)行時(shí)性能。并行流ForkJoinPool通過(guò)靜態(tài)ForkJoinPool.commonPool()方法使用公共可用的流。底層線程池的大小最多使用五個(gè)線程 - 具體取決于可用物理C...
摘要:表達(dá)式還增強(qiáng)了集合庫(kù)。和前面的示例一樣先使用匿名內(nèi)部類來(lái)排序然后再使用表達(dá)式精簡(jiǎn)我們的代碼。使用舊的方式代碼如下所示使用匿名內(nèi)部類根據(jù)排序使用可以通過(guò)下面的代碼實(shí)現(xiàn)同樣的功能使用排序也可以采用如下形式其他的排序如下所示。 本文轉(zhuǎn)自:http://blog.csdn.net/renfufei...轉(zhuǎn)載請(qǐng)注明出處 原文鏈接: Start Using Java Lambda Expressi...
摘要:原文 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...
摘要:?jiǎn)尉€程集合本部分將重點(diǎn)介紹非線程安全集合。非線程安全集合框架的最新成員是自起推出的。這是標(biāo)準(zhǔn)的單線程陣營(yíng)中唯一的有序集合。該功能能有效防止運(yùn)行時(shí)造型。檢查個(gè)集合之間不存在共同的元素。基于自然排序或找出集合中的最大或最小元素。 【編者按】本文作者為擁有十年金融軟件開(kāi)發(fā)經(jīng)驗(yàn)的 Mikhail Vorontsov,文章主要概覽了所有標(biāo)準(zhǔn) Java 集合類型。文章系國(guó)內(nèi) ITOM 管理平臺(tái) O...
閱讀 2629·2021-11-18 10:02
閱讀 2286·2021-09-30 09:47
閱讀 1799·2021-09-27 14:01
閱讀 3116·2021-08-16 11:00
閱讀 3169·2019-08-30 11:06
閱讀 2400·2019-08-29 17:29
閱讀 1541·2019-08-29 13:19
閱讀 451·2019-08-26 13:54