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 }