ArrayList注意事项(可以放入null,且可以多个null)

package com.model.list;
import java.util.ArrayList;
import java.util.List;
/**
* @Description:测试类
* @Author: 张紫韩
* @Crete 2021/6/11 16:39
*/
public class ListDemo05 {
public static void main(String[] args) {
/**
* //ArrayList可以放空值且可以放多个空值,有序可重复,有数组实现存储,线程不安全,效率高
* public boolean add(E e) {
* ensureCapacityInternal(size + 1); // Increments modCount!!
* elementData[size++] = e;
* return true;
* }
* ArrayList线程不安全的,源码中没有synchronized
*
* */
List<Object> list = new ArrayList<>();
list.add(null);
list.add("张紫韩");
list.add(null);
for (Object s:list){
System.out.println(s);
}
}
}


执行步骤(源码跟踪):
无参构造器创建ArrayList对象(new ArrayList<>())

执行添加数据: (list.add( i ))
将 int 类型的 i转换成 包装类型的 Integer类型的

判断空间是否足够,确定是否要扩容




执行操作




package com.model.arraylist; import com.sun.xml.internal.ws.util.StreamUtils; import java.util.ArrayList; import java.util.List; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/11 16:49 */ public class ArrayListDemo01 { /** * 注意:idea在debug模式中,会将数据进行简化,我们看到数据是不完整的,(如arraylist扩容后,扩容的空间在没有数据是,默认是null,但是又是我们会看不到扩容后的数据) * 这就是因为idea将我们的数据进行了简化我们不能看到null, * 问题解决: * * */ public static void main(String[] args) { //案例分析 // 使用无参构造器创建ArrayList对象,底层为 Object[]类型的数组elementData ArrayList<Object> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(i); } for (int i = 10; i < 15; i++) { list.add(i); } list.add(100); list.add(200); list.add(null); } }

package com.model.arraylist; import java.util.ArrayList; import java.util.List; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/6/11 20:44 */ public class ArrayListDemo02 { public static void main(String[] args) { List<Object> list = new ArrayList<>(8); for (int i = 0; i < 8; i++) { list.add(i); } for (int i = 8; i < 12; i++) { list.add(i); } list.add(100); list.add(200); list.add(true); } }
附加:
* 注意:idea在debug模式中,会将数据进行简化,我们看到数据是不完整的,(如arraylist扩容后,扩容的空间在没有数据是,默认是null,但是又是我们会看不到扩容后的数据)
* 这就是因为idea将我们的数据进行了简化我们不能看到null,
* 问题解决

iea的debug模式中设置显示Arraylist中的null完整查看初始数组大小,扩容过程

原文:https://www.cnblogs.com/zzhAylm/p/14876549.html