JDKソース分析−ArrayListの拡張方法−

1544 ワード

ArrayListの拡張を単独でブログに書くのはなぜですか?
前にArrayListに対してソースコード分析を行ったことがあり、拡張についても紹介したが、文章が少し多いことを考えると、一部の友达は全然興味がなくて全部読むかもしれない.この理由に基づいて、拡張ルールを個別にリストします.

ソース:

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);// 1.5 
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);// , elementData。
}

拡張規則について簡単に説明します。


元素添加後に必要な容量Xが元の容量Yより大きい場合に拡容を行い、まずYを約1.5倍(取整)拡大してZを得、XとZの最大値を今回の拡容の実際の容量とする.
1つのテーブルで表示します(パラメータ付きとパラメータなしの構造方法の違いを理解してください.次の2行の値は配列の容量です).
要素数(size)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
new ArrayList()
0
10
10
10
10
10
10
10
10
10
10
15
15
15
15
15
22
new ArrayList(0)
0
1
2
3
4
6
6
9
9
9
13
13
13
13
19
19
19

表の内容を見終わったら、拡張ルールをよく知っているのではないでしょうか。質問があれば、ブロガーに連絡してください。ブロガーが前に書いたブログ「JDKソース分析-ArrayList深く理解する」を詳しく読むこともできます。