摘要:與分析聲明文章均為本人技術(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]; Listlist = Arrays.asList(arr); // Arrays.asList(a)源碼 public static List asList(T... a) { return new ArrayList<>(a); }
Arrays.asList(arr)將數(shù)組arr或者指定個數(shù)的對象轉(zhuǎn)換為list;list是Arrays的內(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ù)組)
針對基本數(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
摘要:實際上,在并行流上使用新的方法。此外,我們了解到所有并行流操作共享相同的范圍。因此,您可能希望避免實施慢速阻塞流操作,因為這可能會減慢嚴(yán)重依賴并行流的應(yīng)用程序的其他部分。 流可以并行執(zhí)行,以增加大量輸入元素的運行時性能。并行流ForkJoinPool通過靜態(tài)ForkJoinPool.commonPool()方法使用公共可用的流。底層線程池的大小最多使用五個線程 - 具體取決于可用物理C...
摘要:表達式還增強了集合庫。和前面的示例一樣先使用匿名內(nèi)部類來排序然后再使用表達式精簡我們的代碼。使用舊的方式代碼如下所示使用匿名內(nèi)部類根據(jù)排序使用可以通過下面的代碼實現(xiàn)同樣的功能使用排序也可以采用如下形式其他的排序如下所示。 本文轉(zhuǎn)自:http://blog.csdn.net/renfufei...轉(zhuǎn)載請注明出處 原文鏈接: 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...
摘要:單線程集合本部分將重點介紹非線程安全集合。非線程安全集合框架的最新成員是自起推出的。這是標(biāo)準(zhǔn)的單線程陣營中唯一的有序集合。該功能能有效防止運行時造型。檢查個集合之間不存在共同的元素。基于自然排序或找出集合中的最大或最小元素。 【編者按】本文作者為擁有十年金融軟件開發(fā)經(jīng)驗的 Mikhail Vorontsov,文章主要概覽了所有標(biāo)準(zhǔn) Java 集合類型。文章系國內(nèi) ITOM 管理平臺 O...
閱讀 2609·2021-11-18 10:02
閱讀 2279·2021-09-30 09:47
閱讀 1745·2021-09-27 14:01
閱讀 3109·2021-08-16 11:00
閱讀 3163·2019-08-30 11:06
閱讀 2392·2019-08-29 17:29
閱讀 1531·2019-08-29 13:19
閱讀 445·2019-08-26 13:54