摘要:如果這個(gè)是剛剛初始化好的容量為,則為默認(rèn)值若容量不固定,則比較與的大小,返回最大值?,F(xiàn)在最小容量大小超過現(xiàn)在數(shù)組的長度,增長自增倍大于溢出三元表達(dá)式,大于取整形最大值用新的長度創(chuàng)建一個(gè)新數(shù)組把原數(shù)組的內(nèi)容拷貝到新數(shù)組中,并返回新數(shù)組
一、構(gòu)造方法 1.創(chuàng)建一個(gè)空ArrayList
public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }
DEFAULTCAPACITY_EMPTY_ELEMENTDATA為private static final的Object[],值為{}
2.創(chuàng)建ArrayList對(duì)象的時(shí)候,把一個(gè)Collection或其子類添加進(jìn)來public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); } }
initialCapacity為初始化容量
EMPTY_ELEMENTDATA也為private static final的Object[],值為{}
public ArrayList(Collection extends E> c) { elementData = c.toArray(); if ((size = elementData.length) != 0) { // c.toArray()可能沒有正確的返回一個(gè)Object數(shù)組對(duì)象 if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(elementData, size, Object[].class); } else { // 創(chuàng)建一個(gè)空的ArrayList this.elementData = EMPTY_ELEMENTDATA; } }二、添加
添加成功返回boolean類型值
public boolean add(E e) { //字面意思:確保容量存在,計(jì)算最小初始容量。 ensureCapacityInternal(size + 1); elementData[size++] = e; return true; }
如果這個(gè)ArrayList是剛剛初始化好的(容量為0),則為默認(rèn)值:10;若容量不固定,則比較size與10的大小,返回最大值。
private void ensureCapacityInternal(int minCapacity) { if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) { minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); } ensureExplicitCapacity(minCapacity); } private void ensureExplicitCapacity(int minCapacity) { modCount++; // 現(xiàn)在最小容量大小超過現(xiàn)在數(shù)組的長度,增長 if (minCapacity - elementData.length > 0) grow(minCapacity); } private void grow(int minCapacity) { int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1);//自增1.5倍 if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0)//大于MAX_ARRAY_SIZE newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity); } private static int hugeCapacity(int minCapacity) { if (minCapacity < 0) // 溢出 throw new OutOfMemoryError(); return (minCapacity > MAX_ARRAY_SIZE) ? //三元表達(dá)式,大于MAX_ARRAY_SIZE取整形最大值 Integer.MAX_VALUE : MAX_ARRAY_SIZE; }
MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
public staticT[] copyOf(T[] original, int newLength) { return (T[]) copyOf(original, newLength, original.getClass()); } public static T[] copyOf(U[] original, int newLength, Class extends T[]> newType) { // 用新的長度創(chuàng)建一個(gè)新數(shù)組 T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(), newLength); // 把原數(shù)組的內(nèi)容拷貝到新數(shù)組中,并返回新數(shù)組 System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/70616.html
摘要:返回刪除元素的刪除方法記錄修改次數(shù)的變量根據(jù)數(shù)組下標(biāo)拿到指定元素計(jì)算移動(dòng)位數(shù)把中復(fù)制到,最后一個(gè)元素置為下標(biāo)檢查,如果大于數(shù)組的,拋出異常返回一個(gè)值的刪除方法傳進(jìn)來,刪除第一個(gè)值為的值注意此時(shí)加入了兩個(gè)值此時(shí)執(zhí)行了一句只刪除了 1.返回刪除元素的刪除方法 public E remove(int index) { rangeCheck(index); modCo...
摘要:類庫中提供了一套相當(dāng)完整的容器類來解決這個(gè)問題,其中基本類型有,,,,這些對(duì)象類型被稱為集合類。但是,類庫中使用了來指代集合類中的子集,,,所以集合類也被稱為容器。五類型是能夠?qū)?duì)象映射到其他對(duì)象的一種容器,有區(qū)別于的方法。 引言 如果一個(gè)程序只包含固定數(shù)量的且其生命周期都是已知對(duì)象,那么這是一個(gè)非常簡單的程序——《think in java》 了解容器前,先提出一個(gè)問題,ArrayL...
摘要:概述用久了,深受其約定大于配置的便利性毒害之后,我想回歸到時(shí)代,看看開發(fā)模式中用戶是如何參與的。備注當(dāng)然本文所使用的全是非注解的配置方法,即需要在中進(jìn)行配置并且需要遵循各種實(shí)現(xiàn)原則。而更加通用主流的基于注解的配置方法將在后續(xù)文章中詳述。 showImg(https://segmentfault.com/img/remote/1460000015244684); 概述 用久了Sprin...
摘要:可以看到,如果我們給泛型類制定了上限,泛型擦除之后就會(huì)被替換成類型的上限。相應(yīng)的,泛型類中定義的方法的類型也是如此。參考語言類型擦除下界通配符和的區(qū)別 本篇博客主要介紹了Java類型擦除的定義,詳細(xì)的介紹了類型擦除在Java中所出現(xiàn)的場景。 1. 什么是類型擦除 為了讓你們快速的對(duì)類型擦除有一個(gè)印象,首先舉一個(gè)很簡單也很經(jīng)典的例子。 // 指定泛型為String List list1 ...
摘要:注本文首發(fā)于公眾號(hào),可長按或掃描下面的小心心來訂閱實(shí)驗(yàn)環(huán)境版本版本首先當(dāng)然需要安裝好環(huán)境,最好再安裝上可視化插件來便于我們直觀地查看數(shù)據(jù)。 showImg(https://segmentfault.com/img/remote/1460000015723674); 注: 本文首發(fā)于 My 公眾號(hào) CodeSheep ,可 長按 或 掃描 下面的 小心心 來訂閱 ↓ ↓ ↓ showI...
閱讀 3115·2023-04-25 20:22
閱讀 3410·2019-08-30 11:14
閱讀 2657·2019-08-29 13:03
閱讀 3256·2019-08-26 13:47
閱讀 3303·2019-08-26 10:22
閱讀 1331·2019-08-23 18:26
閱讀 684·2019-08-23 17:16
閱讀 1971·2019-08-23 17:01