ArrayList擴容機制怎樣?


1.ArrayList每次擴容是原來得1.5倍。

2.數組進行擴容時,會將老數據中得元素重新拷貝一份道新的數組中,每次數組容量得增長大於時原用量得1.5倍。

3.代價是很高得,因此再實際使用時,我們因該避免數組容量得擴張。盡可能避免數據容量得擴張。盡可能,就至指定容量,避免數組擴容的發生。

4.創建方式不同,容量不同。

初始化方式 容量 數量變化
List arrayList = new ArrayList(); 初始數組容量為10 10->15->22->33->49->74->...
List arrayList = new ArrayList(4); 4 4->6->9->13->19->...
斷點看擴容情況:List arrayList = new ArrayList();
public class TestArrayList {

    public static void main(String[] args) {

        List<Integer> list = new ArrayList<>();

​

        for (int i = 1; i <= 20; i++) {

            if (i == 1) {

                System.out.println("斷點位置 沒添加元素時候容量 0");

            }

            list.add(i);

            if (i == 1) {

                System.out.println("斷點位置 第一次添加元素 容量 10");

            }

            if (i == 11) {

                System.out.println("斷點位置 第1次擴容 容量 15");
            }
            if (i == 16) {

                System.out.println("斷點位置 第2次擴容 容量15*1.5= 22.5,22 or 23 ");

           }

        }
} }

斷點看擴容情況:

 1 public class TestArrayList1 {
 2 
 3     public static void main(String[] args) {
 4 
 5         List<Integer> list = new ArrayList<>(4);
 6 
 7  8 
 9         for (int i = 1; i <= 20; i++) {
10 
11             if (i == 1) {
12 
13                 System.out.println("斷點位置 沒添加元素時候容量 4");
14 
15             }
16 
17             list.add(i);
18 
19             if (i == 5) {
20 
21                 System.out.println("斷點位置 第一次擴容 容量 6 ");
22 
23             }
24 
25             if (i == 7) {
26 
27                 System.out.println("斷點位置 第二次擴容 容量9");
28 
29             }
30 
31         }
32 
33     }
34 
35 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM