美文网首页
ArrayList源码分析(1.8)

ArrayList源码分析(1.8)

作者: 台风口的猪 | 来源:发表于2019-10-29 16:10 被阅读0次

    基本属性

       // 初始化默认容器大小 
        private static final int DEFAULT_CAPACITY = 10; 
    
    

    ArrayList的扩容

    1.当添加第一个元素时,将扩展到默认容量。

    默认容量大小为10

    2. modCount++记录操作list 的次数,判断是否需要扩容

    image

    3.如果需要扩容 (不需要扩容加表末尾)

    image

    1处表示:新容量扩大到原容量(上一次扩容容量)的1.5倍,右移一位相关于原数值除以2
    2处表示:真正扩容的地方
    3.copy数据
    通过Arrays.copyOf() 在其内部创建了一个新的数组,然后调用arrayCopy()向其复制内容,返回出去,
    数据copy过程
    1.copyOf()的实现是用的是arrayCopy();
    2.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作。
    3.copyOf()在内部新建一个数组,调用arrayCopy()将original内容复制到copy中去,并且长度为newLength。返回copy;


    image image

    src - 源数组。
    srcPos - 源数组中的起始位置。
    dest - 目标数组。
    destPos - 目标数据中的起始位置。
    length - 要复制的数组元素的数量。

    3.1 ArrayList有容量上限吗?
      ArrayList是有最大容量的,最大为Integer.MAX_VALUE,即((2^31)-1)2147483647
      有些虚拟机在阵列中保留一些头信息,防止内存溢出,
     此时,我们发现ArrayList最大容量是(Integer.MAX_VALUE-8)
    

    相关文章

      网友评论

          本文标题:ArrayList源码分析(1.8)

          本文链接:https://www.haomeiwen.com/subject/rzhgvctx.html