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 }

 

posted @ 2020-12-08 16:42  乃颜先生  阅读(2893)  评论(0编辑  收藏  举报