Java教程

java--集合--ArrayList源码分析

本文主要是介绍java--集合--ArrayList源码分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

 

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

    1.  

      复制代码
      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);
              }
      
          }
      }
  2. ArrayList源码分析
    1. 扩容机制
    2. 执行步骤(源码跟踪):

      1. 无参构造器创建ArrayList对象(new ArrayList<>())

      2.  执行添加数据: (list.add( i ))

        1. 将 int 类型的 i转换成 包装类型的 Integer类型的

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

        3. 执行操作 

        4.  

          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);
              }
          }

           

           

           

           

      3. 有参构造创建指定大小的ArrayList对象
        1.   
        2. 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);
          
          
              }
          }

           

    3. 附加:
      1. * 注意:idea在debug模式中,会将数据进行简化,我们看到数据是不完整的,(如arraylist扩容后,扩容的空间在没有数据是,默认是null,但是又是我们会看不到扩容后的数据)
        * 这就是因为idea将我们的数据进行了简化我们不能看到null,
        * 问题解决
      2.  iea的debug模式中设置显示Arraylist中的null完整查看初始数组大小,扩容过程

        1.  

           

           

           

            

           

           

           

           

           

           

             

             

           

             
这篇关于java--集合--ArrayList源码分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!