Java_ArrayList底层结构和源码分析
1)permits all elements, including null, ArrayList 可以加入多个null
2)ArrayList是由数组来实现数据存储的
3)ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高) ,在多线程情况下,不建议使用ArrayList
package com.ArrListStu.List_;import java.util.ArrayList;public class ArrayListDetail {//ArrayList是线程不安全的,可以看到,它的源码中没有synchronized修饰/*public boolean add(E e) {ensureCapacityInternal(size + 1);elementData[size++] = e;return true;}*///permits all elements, including null, ArrayList 可以加入多个nullpublic static void main(String[] args) {ArrayList arrayList = new ArrayList();arrayList.add(null);arrayList.add("jack");arrayList.add(null);System.out.println(arrayList);}
}ArrayList底层操作机制源码分析:
1)ArrayList中维护了一个Object类型的数组elementData.
transient Object[] elementData; //transient表示短暂的/瞬间,代表该属性不被序列化2)当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第一次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍 (空参构造:0-10-15-22-33-49-.....)
3)如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍
代码分析:
示例:
package com.ArrListStu.List_;import java.util.ArrayList;public class ArrayListSource {public static void main(String[] args) {//解读://使用无参构造器创建ArrayList对象//ArrayList list = new ArrayList(); //有参构造ArrayList list = new ArrayList(); //空参构造//使用for循环给list集合添加1-10数据for (int i = 1; i <= 10; i++) {list.add(i);}//使用for循环给list集合添加11-15数据for (int i = 11; i <= 15; i++) {list.add(i);}list.add(100);list.add(200);list.add(null);}
}步骤分析:

