溫馨提示×

java中add方法怎樣實現動態(tài)擴容

小樊
81
2024-09-24 01:01:03
欄目: 編程語言

在Java中,ArrayList和LinkedList等集合類使用了動態(tài)擴容策略來存儲和管理元素。這里以ArrayList為例,介紹其內部實現原理以及如何實現動態(tài)擴容。

  1. ArrayList內部實現原理: ArrayList是一個動態(tài)數組,其底層使用一個Object類型的數組elementData來存儲元素。當向ArrayList中添加元素時,如果elementData的長度小于等于需要添加的元素個數,那么ArrayList會進行動態(tài)擴容。

  2. 動態(tài)擴容的實現: ArrayList的動態(tài)擴容主要包括以下幾個步驟:

    a. 計算新的容量:首先,計算新的容量大小。通常情況下,新的容量大小為原容量的1.5倍。這是因為擴容操作需要消耗一定的資源,為了減少擴容操作的次數,通常會預留一定的空間。

    b. 檢查新容量是否合法:如果新的容量大小為Integer.MAX_VALUE,那么將新的容量設置為Integer.MAX_VALUE。這是因為在Java中,數組的最大長度為Integer.MAX_VALUE,所以需要檢查新容量是否超過了這個值。

    c. 創(chuàng)建新的數組:根據新的容量大小,創(chuàng)建一個新的數組。新的數組的長度為新容量大小。

    d. 復制元素:將原數組中的元素復制到新數組中。注意,這里是從原數組的最后一個元素開始復制,直到新數組的第一個元素。

    e. 更新數組引用:將原數組的引用更新為新數組。

  3. 示例代碼:

import java.util.ArrayList;

public class DynamicArrayDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add("Element " + i);
            if (list.size() == list.capacity()) {
                System.out.println("Dynamic resizing occurred.");
                list = new ArrayList<>(list.capacity() * 2);
            }
        }
        System.out.println(list);
    }
}

在這個示例中,我們創(chuàng)建了一個ArrayList,并向其中添加了10個元素。當ArrayList的容量不足以存儲新添加的元素時,會自動進行動態(tài)擴容。

0