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倍。

原文地址:https://www.cnblogs.com/wuhao-0206/p/13062562.html