ArrayList源码摘要、收获

参考

https://blog.csdn.net/weixin_39723544/article/details/82228720

ArrayList源码摘要


ArrayList<E>

  • extends AbstractList<E>   继承 AbstractList<E>

  • implements List<E>, RandomAccess, Cloneable, java.io.Serializable   实现 List<E>、 随机访问、可克隆、序列化


默认初始容量
int DEFAULT_CAPACITY = 10;


共享空对象(减少内存消耗)
Object[] EMPTY_ELEMENTDATA = {};


共享空对象(标记了扩容的可能)
Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};


数据对象存放处
transient 关键字 是因为 不希望elementData数组全部被序列化(空元素不用序列化)
transient Object[] elementData;


当前 ArrayList 存放的元素数量(区别于 DEFAULT_CAPACITY )
int size;


指定容量(可以为0)的构造函数


无参构造函数


入参为 Collection<? extends E> 类型的构造函数


修剪 ArrayList 到 size的长度
void trimToSize()


保证容量 大于等于 minCapacity
void ensureCapacity(int minCapacity)


扩容
Object[] grow(int minCapacity)
最小增长量为 minCapacity - oldCapacity
推荐增长量为 oldCapacity >> 1 (除以2)
实际扩容量为 max (最小增长量,推荐增长量 )


无参扩容,默认增长 1
Object[] grow()


收获

  • 空对象的共享化
  • transient 关键字的应用
  • 对参数进行检查,必要时抛异常
  • 扩容增长量的计算
  • 判等 要用 equals 不用 ==
  • 将错误信息生成独立为一个函数
  • 对应的迭代器的类实现在其内部(即 迭代器类 为其内部类)
  • 自己实现序列化和反序列化的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值