日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ArrayList构造方法详解-给默认长度的方式

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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构造方法详解-给默认长度的方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。