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 }
