Java--集合--ArrayList
-
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源码分析
- 扩容机制
-
执行步骤(源码跟踪):
-
无参构造器创建ArrayList对象(new ArrayList<>()),创建了一个空数组elementData
-
-
执行添加数据: (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); } }
-
- 有参构造创建指定大小的ArrayList对象
-
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完整查看初始数组大小,扩容过程
-
-
- 扩容机制