摘要:常見問題匯總的默認初始長度是多少最大長度是多少的默認初始長度是,是由設(shè)定的。這里需要注意常量并不是真正的最大長度,原因可以參考方法。特殊情況是存在長度超過的最大支持長度則調(diào)用進行特殊處理防止數(shù)組超出最大長度最大值。
簡介
ArrayList使用Object數(shù)組存儲數(shù)組元素,并使用size屬性記錄數(shù)組長度。
需要注意ArrayList是非線程安全的。
常見問題匯總ArrayList的默認初始長度是多少?最大長度是多少?
ArrayList的默認初始長度是10,是由DEFAULT_CAPACITY設(shè)定的。
由于ArrayList底層是用Object數(shù)組存儲元素,所以ArrayList最大長度為Integer.MAX_VALUE,即2147483647(2)。這里需要注意常量MAX_ARRAY_SIZE(Integer.MAX_VALUE - 8)并不是ArrayList真正的最大長度,原因可以參考hugeCapacity()方法。
ArrayList是如何擴容的?
擴容發(fā)生在插入數(shù)組元素時(關(guān)鍵方法為grow()方法)
先計算增加完新元素后的ArrayList長度size
然后size與minCapacity比較來判斷是否需要擴容
擴容時一般擴容為新數(shù)組長度newCapacity為原數(shù)組長度oldCapacity的1.5倍(oldCapacity帶符號右移1位并加上oldCapacity)。
特殊情況是存在newCapacity長度超過Array的最大支持長度MAX_ARRAY_SIZE則調(diào)用hugeCapacity()進行特殊處理防止數(shù)組超出最大長度(int最大值)。
ArrayList擴容后是否會自動縮容?如果不能怎樣進行縮容?
ArrayList只能自動擴容,不能自動縮容。如果需要進行縮容,可以調(diào)用ArrayList提供的trimToSize()方法。
ArrayList底層數(shù)組擴容時是如何保證高效復(fù)制數(shù)組的?
表面上是調(diào)用Arrays.copyOf()方法,實際上是Arrays.copyOf()通過調(diào)用System.arraycopy()方法確保高效復(fù)制數(shù)組。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/73796.html
摘要:類比根據(jù)定制排序,返回最大元素,排序規(guī)則由類控制。返回指定支持的同步線程安全的。將返回的列表更改為寫入數(shù)組。字符串表示由數(shù)組元素的列表組成,括在方括號中。 1. Collections類的常見操作: 1.1. 排序操作: 集合類庫使用的是歸并排序比快速排序要慢一些,快速排序是通用排序算法的傳統(tǒng)選擇。但是,歸并排序有一個主要的優(yōu)點就是穩(wěn)定。 void reverse(List list)...
摘要:既然的構(gòu)造方法是復(fù)制新的數(shù)組,那么是為什么呢這里提前透露一下結(jié)論數(shù)組元素為對象時,實際上存儲的是對象的引用,進行數(shù)組復(fù)制也只是復(fù)制了對象的引用。即數(shù)組元素為對象時,實際上存儲的是對象的引用。 前言 事件起因是由于同事使用ArrayList的帶參構(gòu)造方法進行ArrayList對象復(fù)制,修改新的ArrayList對象中的元素(對象)的成員變量時也會修改原ArrayList中的元素(對象)的...
摘要:首先,我們來按照泛型的標準重新設(shè)計一下類。注意參數(shù)為而不是泛型。利用形式的通配符,可以實現(xiàn)泛型的向上轉(zhuǎn)型,來看例子。需要注意的是,無法從這樣類型的中取出數(shù)據(jù)。showImg(https://user-gold-cdn.xitu.io/2019/5/17/16ac3bf3eb16160c); 00、故事的起源 二哥,要不我上大學的時候也學習編程吧?有一天,三妹突發(fā)奇想地問我。 你確定要做一名...
摘要:盡可能避免使用,會導(dǎo)致復(fù)制數(shù)組,降低效率。再額外提一點,我們常用的另一個容器也是推薦要初始化長度從而避免擴容。 showImg(https://segmentfault.com/img/remote/1460000019659723); 前言 前不久幫同事一起 review 一個 job 執(zhí)行緩慢的問題時發(fā)現(xiàn)不少朋友在擼碼實現(xiàn)功能時還是有需要細節(jié)不夠注意,于是便有了這篇文章。 Arra...
摘要:以下指代數(shù)組,指代數(shù)組列表。常見的轉(zhuǎn)換方法是或。在的使用過程中需要注意,當要轉(zhuǎn)換的長度小于的時,不要試圖通過傳入形參的方式進行轉(zhuǎn)換,雖然這在的長度大于時不會出現(xiàn)問題。所以,極度建議在轉(zhuǎn)換之前初始化的長度為的,并且使用返回值重新給賦值。 Array 和 List 都是我們在開發(fā)過程中常見的數(shù)據(jù)結(jié)構(gòu)。我們都知道 Array 是定長的,List 是可變長。而且,List 的實現(xiàn)類 Array...
閱讀 2335·2021-09-30 09:48
閱讀 3693·2021-09-24 10:27
閱讀 1939·2021-09-22 15:32
閱讀 2101·2021-08-09 13:44
閱讀 3658·2019-08-30 15:55
閱讀 1111·2019-08-29 17:12
閱讀 2143·2019-08-29 17:05
閱讀 2984·2019-08-29 13:43