ArrayList简介
- ArrayList基于数组实现,是一个动态数组队列,容量可以自动增加
ArrayList继承AbstractList,实现RandomAccess和Serializable接口
1
2public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.SerializableArrayList
继承AbstractList
继承AbstractCollection
实现List
接口- 意味着具有添加、删除、修改和遍历等功能
- 实现了
RandomAccess
接口- 提供了随机访问功能,实际上就是通过下标序号进行快速访问
- 实现了
Serializable
接口- 支持序列化,也就意味了ArrayList能够通过序列化传输
继承关系
1 | java.lang.Object |
实现接口
1 | Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess |
ArrayList方法(API)
1 | // Collection中定义的API |
ArrayList源码分析
1 | public class ArrayList<E> extends AbstractList<E> |
总结
- ArrayList 本质上实现方法是数组实现,非同步,线程不安全
- ArrayList 默认容量为10,最大容量不超过Integer.MAX_VALUE - 8!
- ArrayList 中查找元素的时候,查找不到返回-1
- ArrayList 扩容的时候,新容量=(原始容量 * 3)/2+1
- ArrayList 克隆时,全部元素克隆在一个数组中
- ArrayList 序列化,先写容量,在依次写入元素
- ArrayList 反序列化的时候,先读容量,在依次读取每个元素
- ArrayList 中容量不够,每次增加元素的时候,都会将原来的元素拷贝到新数组中,耗时。建议事先确定容量或者使用LinkedList
- ArrayList 查找效率高,插入和删除的效率较低
- ArrayList 允许其中元素为null
参考
https://blog.csdn.net/u010648555/article/details/57415966
https://github.com/zxiaofan/JDK/blob/master/JDK1.8/src/java/util/ArrayList.java