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