ArrayList可以加入null,并且多个。 ArrayList arrayList = new ArrayList();
arrayList.add(null);
arrayList.add("兮动人");
arrayList.add(null);
System.out.println(arrayList);

ArrayList基本等同于Vector,除了ArrayList是 线程不安全(执行效率高) 。add 方法没有 synchronized (同步)修饰。public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
ArrayList中维护了一个Object类型的数组elementData。[debug看源码]
transient Object[] elementData; ,transient表示瞬间,短暂的,表示该属性不会被序列化

当创建ArrayList对象时,如果使用的是无参构造器,则初始值elementData容量为0,第1次 添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍。



elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍。

//使用无参构造器创建 ArrayList 对象
//ArrayList list = new ArrayList();
ArrayList list = new ArrayList(8);
//使用 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);
注意:Idea 默认情况下,Debug 显示的数据是简化后的,如果希望看到完整的数据,需要设置如下

ArrayList 无参构造分析:
可以看到 ArrayList 第一次初始化后的 elementData 是个空数组




ArrayList 有参分析
