欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

ArrayList的構造

ArrayList有三個構造方法:

1、無參構造

2、利用其它構建

3、指定順序表初始容量

無參構造的源碼分析

public ArrayList() {
? ? this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

上面是ArrayList()無參構造的源碼。那么elementData 和 DEFAULTCAPACITY_EMPTY_ELEMENTDATA是啥呢?我們接著找。

transient Object[] elementData; // non-private to simplify nested class access
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

看到上面兩行源碼,我們可以得出elementData是一個沒有指向數組的索引。DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一個大小為0的數組

在無參構造中的:this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;這行代碼表示讓elementData 存儲大小為0的數組的索引。

public boolean add(E e) {
? ? ensureCapacityInternal(size + 1); ?// Increments modCount!!
? ? elementData[size++] = e;
? ? return true;
}

ensureCapacityInternal(size + 1);這個方法源碼的注釋是遞增模數!!。其實就和我們在順序表中判斷其是否滿了然后擴容這個操作是十分相似 的。我們接下來看一下他的源碼:

private void ensureCapacityInternal(int minCapacity) {
? ? ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}

?

如果想要了解ensureCapacityInternal就必須要了解ensureExplicitCapacity和calculateCapacity的源碼

查看calculateCapacity源碼 (中文注釋為我的解釋):

private static int calculateCapacity(Object[] elementData, int minCapacity) {
? ? //DEFAULTCAPACITY_EMPTY_ELEMENTDATA是ArrayList進行無參初始化的時候
? ? //給其賦值的一個大小為0的數組。沒有發生什么特殊的變化則是可以進入這個判斷
? ? if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
? ? ? ? //private static final int DEFAULT_CAPACITY = 10;
? ? ? ? //上一行是DEFAULT_CAPACITY的源碼,
? ? ? ? //下面一行代碼是DEFAULT_CAPACITY,和minCapacity哪個值最大所比較
? ? ? ? return Math.max(DEFAULT_CAPACITY, minCapacity);//返回的是:10和1比較最大的10
? ? }
? ? return minCapacity;
? ? //若是傳入的大小大于10的話返回的就是傳入的minCapacity數值
}

查看ensureExplicitCapacity(calculateCapacity源碼(中文注釋為我的解釋):

private void ensureExplicitCapacity(int minCapacity) {//minCapacity是10
? ? modCount++;
? ??
? ? // overflow-conscious code
? ? if (minCapacity - elementData.length > 0)
? ? ? ? //minCapacity的大小為10,elementData.length的大小為0 這個判斷語句可以進入
? ? ? ? grow(minCapacity);
}

?

查看grow源碼(中文注釋為我的解釋):

private void grow(int minCapacity) {//minCapacity 為 10?
? ? // overflow-conscious code
? ? int oldCapacity = elementData.length;//oldCapacity 大小為 0
? ? //newCapacity 大小oldCapacity的1.5倍為 0
? ? int newCapacity = oldCapacity + (oldCapacity >> 1);
? ? //newCapacity - minCapacity的值為 -10 這個判斷能夠給進入
? ? if (newCapacity - minCapacity < 0)
? ? ? ? newCapacity = minCapacity;//newCapacity 為 10
? ? //這個判斷語句進不去,MAX_ARRAY_SIZE是一個很大的值newCapacity - MAX_ARRAY_SIZE < 0
? ? //這個判斷的作用在下面詳解add源碼的時候再解釋
? ? if (newCapacity - MAX_ARRAY_SIZE > 0)
? ? ? ? newCapacity = hugeCapacity(minCapacity);
? ? // minCapacity is usually close to size, so this is a win:
? ? //newCapacity的值為10,elementData擴容大小為10
? ? elementData = Arrays.copyOf(elementData, newCapacity);
}

?

?

?

文章鏈接: http://www.qzkangyuan.com/22435.html

文章標題:ArrayList的構造

文章版權:夢飛科技所發布的內容,部分為原創文章,轉載請注明來源,網絡轉載文章如有侵權請聯系我們!

聲明:本站所有文章,如無特殊說明或標注,均為本站原創發布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發布本站內容到任何網站、書籍等各類媒體平臺。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
建站教程

查看數組的大小

2023-7-25 13:27:13

建站教程

其他構造的源碼分析

2023-7-26 14:30:42

0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個人中心
購物車
優惠劵
今日簽到
有新私信 私信列表
搜索
主站蜘蛛池模板: 淮安市| 天长市| 准格尔旗| 肥西县| 皮山县| 秦皇岛市| 肃北| 淳安县| 五台县| 澎湖县| 枣强县| 贺州市| 广德县| 永靖县| 韶山市| 阜城县| 合肥市| 长宁区| 遵义市| 梁山县| 天台县| 大丰市| 将乐县| 城市| 健康| 津市市| 正镶白旗| 开阳县| 伊金霍洛旗| 长白| 湘潭县| 鸡泽县| 肃南| 阳原县| 霍山县| 东至县| 图们市| 朝阳县| 刚察县| 玛曲县| 双流县|