ArrayList源码分析
一、概念
ArrayList底层通过数组实现,随着元素的增加而动态扩容,线程不安全集合。
二、分析
1、继承自AbstractList
2、实现List接口,获得List基本集合所具有的操作方法。
3、实现RandonAccess接口,改接口没有定义任何方法,其是一个标记方法,为了获得快速随机访问存储元素的功能。
4、实现Cloneable接口,得到了clone()方法,可以实现克隆功能。
5、实现Serializable接口,表示可以被序列化,通过序列化去传输。
三、总结
- 容量不固定,随着容量的增加而动态扩容,默认初始容量为10,
- 有序集合(插入的顺序==输出的顺序)
- 插入的元素可以为null
- 增删改查效率更高(相对于LinkedList来说)
- 线程不安全
四、扩容机制
由上述源码可以看到,当原数组长度为0时,长度不超过10时,给出默认长度10,否则,则加1;当需要的数组长度大于原数组时,则进行扩容,且扩容后的长度为
int newCapacity = oleCapacity+(oldCapacity>>1),原有长度+原有长度的一半,即原有长度的1.5倍。