Java基础-ArrayList的底层源码过程分析

package com.hspedu.collection_;


import java.util.ArrayList;

@SuppressWarnings({"all"})
public class Course510 {
    public static void main(String[] args) {
        // ArrayList底层源码1

        /*
         *  1、ArrayList()底层创建了空的 Object[] elementDate; 存放数据
         *  2、add方法会先确定容量空间,是否需要扩容,然后再添加元素,minCapacity初始为10(无参扩容)
         *      int newCapacity = oldCapacity + (oldCapacity >> 1); 1.5倍扩容
         *      elementData = Arrays.copyOf(elementData, newCapacity); 实现扩容
         *      modCount记录集合被修改的次数,防止多线程出现异常
         * */
        ArrayList list = new ArrayList();
        for (int i = 1; i <= 10; i++) {
            list.add(i);
        }

        for (int i = 11; i <= 15; i++) {
            list.add(i);
        }
        list.add(100);
        list.add(200);
        list.add(null);
    }
}

 

package com.hspedu.collection_;

import java.util.ArrayList;

@SuppressWarnings({"all"})
public class Course511 {
    public static void main(String[] args) {
        // ArrayList底层源码2


        /*
         *  ArrayList(int)创建指定大小的 elementData;
         *      public ArrayList(int initialCapacity) {...}
         *      this.elementData = new Object[initialCapacity];
         *  当ArrayList集合的容量不够添加时,扩容基于当前容量大小的1.5倍进行扩容,如 8->12->18->...
         * 
         * */
        ArrayList list = new ArrayList(8);
        for (int i = 1; i <= 10; i++) {
            list.add(i);
        }
        for (int i = 11; i <= 15; i++) {
            list.add(i);
        }
        list.add(100);
        list.add(200);
        list.add(null);
    }
}

 

posted @ 2022-03-22 21:11  柯南同学  阅读(29)  评论(0编辑  收藏  举报