ArrayList构造方法详解-给默认长度的方式
生活随笔
收集整理的這篇文章主要介紹了
ArrayList构造方法详解-给默认长度的方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
package com.jettyw.arraylist;import java.util.ArrayList; import java.util.List;/*** * @author jettyw* 2017-05-25* 使用給默認長度的方式創建ArrayList對象*/ public class ArrayListConstructorTest {public static void main(String[] args) {//創建list對象,傳入參數5List<String> list=new ArrayList<String>(5);list.add("1111");} }我們看一下這種構造方法的源碼
public ArrayList(int initialCapacity) {//如果大于0,則創建一長度為initialCapacity的數組if (initialCapacity > 0) {this.elementData = new Object[initialCapacity];//如果等于0,創建一個空數組,長度為0} else if (initialCapacity == 0) {this.elementData = EMPTY_ELEMENTDATA;} else {//否則拋出非法異常throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);}}那么我們第一次添加元素的時候會怎么樣呢,還是先看ensureCapacityInternal(int minCapacity)這個方法,再添加元素之前總會先執行這個方法,確保數組的長度夠用。
private void ensureCapacityInternal(int minCapacity) {//此時數組不會等于DEFAULTCAPACITY_EMPTY_ELEMENTDATA,也就是說不會使用默認長度了if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);}//此時if語句不會執行//第一次添加元素minCapacity=1ensureExplicitCapacity(minCapacity);}上面的if語句不會在執行直接執行ensureExplicitCapacity(minCapacity);方法
private void ensureExplicitCapacity(int minCapacity) {modCount++;//第一次添加元素minCapacity=1//只有傳入參數為0,即數組為EMPTY_ELEMENTDATA才會擴展數組長度//傳入參數只要大于0,第一次添加元素就擴展數組大小,后面再添加新元素時,根據情況進行擴展if (minCapacity - elementData.length > 0)grow(minCapacity);}當傳入參數為0時,調用grow()方法擴展數組長度。
private void grow(int minCapacity) {//0int oldCapacity = elementData.length;//0int newCapacity = oldCapacity + (oldCapacity >> 1);//newCapacity =1if (newCapacity - minCapacity < 0)newCapacity = minCapacity;if (newCapacity - MAX_ARRAY_SIZE > 0)newCapacity = hugeCapacity(minCapacity);//擴展為長度為1的新數組elementData = Arrays.copyOf(elementData, newCapacity);}如果傳入參數為0,第一次添加元素最終會擴展為長度為1的新數組。
轉載于:https://my.oschina.net/jettyWang/blog/909259
總結
以上是生活随笔為你收集整理的ArrayList构造方法详解-给默认长度的方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring控制反转(依赖注入)的最简单
- 下一篇: 01背包模板、全然背包 and 多重背包