【底层实现】ArrayList底层源码

我觉得这篇文章写的很不错,标记一下

参考文章
Java面试专项——集合专题一(ArrayList)–万字读懂ArrayList底层原理

我看了这篇文章只做个总结:

ArrayList中的成员变量:

/**
     * Default initial capacity.
     */
     // 默认容量为10,一般是在集合进行初始化扩容的时候
    private static final int DEFAULT_CAPACITY = 10;

    /**
     * Shared empty array instance used for empty instances.
     */
    private static final Object[] EMPTY_ELEMENTDATA = {}; // 空数组

    /**
     * Shared empty array instance used for default sized empty instances. We
     * distinguish this from EMPTY_ELEMENTDATA to know how much to inflate when
     * first element is added.
     */
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; // 默认的空数组

    /**
     * The array buffer into which the elements of the ArrayList are stored.
     * The capacity of the ArrayList is the length of this array buffer. Any
     * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
     * will be expanded to DEFAULT_CAPACITY when the first element is added.
     */
     // 真正的集合内容存放在这里面
    transient Object[] elementData; // non-private to simplify nested class access

    /**
     * The size of the ArrayList (the number of elements it contains).
     *
     * @serial
     */
     // 集合元素个数,不是集合的长度
    private int size;
  • ArrayList是使用size属性来确定数组是否越界,并非构造方法public ArrayList(int initialCapacity)中的initialCapacity。
  • size表示的是数组中元素的数量,并非数组的容量。
  • ArrayList的容量是elementData数组的长度,ArrayList中包含的元素的个数是size的大小
  • ArrayList的扩容操作其实是在grow()方法中进行的,前面的操作都是用来判断是否满足扩容的条件
  • 扩容后的容量计算:int newCapacity = oldCapacity + (oldCapacity >> 1),一个整形变量右移一位,num>>1,如果num为正偶数,那么num>>1等价于num/2。如果num为正奇数,那么num>>1等价于num/2向下取整。所以ArrayLis容量不足时,扩容50%或者扩容到原来的1.5倍的说法并不严谨
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值