超详细阅读ArrayList源码,我读完等于你读完

话不多说、直接进入正题

  • 首先看看ArrayList继承关系

  • 构造方法

    • new ArrayList<>() 构造方法只 初始化了一个空数组对象
    • new ArrayList<>(Collection<? extends E> c) 构造参数为一个新的集合对象
      • c.toArray() 方法每次调用都会重新生成返回一个新数组对象,所以传入参数的改变不会影响当前集合的值
    • new ArrayList<>(15) 构造参数为一个初始数组大小
  • add 方法

    • 集合扩容

      •  ensureCapacityInternal(size + 1) 外层方法,内部包含数组扩容的逻辑 
        • size 表示当前内部数组元素的可写下标,新增元素都会 ++;
        • calculateCapacity 默认情况下数组大小为 DEFAULT_CAPACITY = 10
        • ensureExplicitCapacity 外部校验是否需要发生数组扩容 (内部数组可写下标 size + 1 > 数组长度) 发生扩容 grow
          • grow(minCapacity)  扩容
          • 扩容逻辑: 当前数组大小 + (当前数组大小 / 2), 扩容之后比扩容之前大了1/2
  • get(index) 取值

    • rangeCheck(index) 取值范围校验

    • elementData(int index) 数组对应下标值

  • E set(int index, E element) 插入方法

    • rangeCheck(index) 范围校验

    • 新值替换旧值,方法返回旧的值

  • size 方法 返回 size

  • sort  内部调用了数组工具的sort 排序方法

  • contains 是否包含

    • 内部调用了 indexOf 方法, 遍历整个数组,比较. 确认是否包含
  • clear()  清除

    • 元素内部引用值为null,size = 0

   

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值