码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2021-06-13 09:29:29      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:oom   void   tde   数据   size   out   sync   style   rgb   

 

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

    1. 技术图片

    2.  

      技术图片
      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. 扩容机制
      1. 技术图片

    2. 技术图片
    3. 执行步骤(源码跟踪):

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

        • 技术图片
      2.  执行添加数据: (list.add( i ))

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

          • 技术图片
        2. 判断空间是否足够,确定是否要扩容

          1. 技术图片
          2. 技术图片
          3. 技术图片
          4. 技术图片

        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. 技术图片  
        3. 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);
          
          
              }
          }

           

    4. 附加:
      1. * 注意:idea在debug模式中,会将数据进行简化,我们看到数据是不完整的,(如arraylist扩容后,扩容的空间在没有数据是,默认是null,但是又是我们会看不到扩容后的数据)
        * 这就是因为idea将我们的数据进行了简化我们不能看到null,
        * 问题解决
        1. 技术图片

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

        1. 技术图片

           

           

           

           

            

           

           

           

           

           

           

             

             

           

             

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

标签:oom   void   tde   数据   size   out   sync   style   rgb   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!