ArrayList简介
- ArrayList基于数组实现,是一个动态数组队列,容量可以自动增加
- ArrayList继承AbstractList,实现RandomAccess和Serializable接口 - 1 
 2- public class ArrayList<E> extends AbstractList<E> 
 implements List<E>, RandomAccess, Cloneable, java.io.Serializable
- ArrayList继承- 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
