ArrayList解析
我们了解一个接口,最好的切入点是API官方文档,所以首先看下ArrayList接口的接口API:
public class ArrayList<E>
extends AbstractList<E>
implments List, RandomAccess, Cloneable, Serializable
我们首先看到ArrayList接口继承自抽象类AbstractList;关于AbstractList ,需要了解AbstractList 中
提供了两个迭代器的实现类,默认实现了迭代器接口,
实现了对元素的遍历(Itr和ListItr);
其内部只有一个抽象方法 get(也就是表明继承的子类如ArrayList只需要实现(覆盖)这一个抽象的get方法即可,可以用来获取元素);
如果子类要操作元素,还需要重写 add(), set(), remove() 方法,因为默认是不支持的。
然后看到ArrayList接口实现了List接口;List接口的特点:元素是对象,有序,可重复。List接口中需要了解一些
与下标有关的操作,
如get,set,add(注意有两个重载的add方法),indexOf等等,建议手动查看API文档。
接着ArrayList接口实现了RandomAccess接口,表明支持快速随机访问。
ArrayList接口实现了Cloneable标明ArrayList支持克隆;实现Serializable表明支持序列化,既可以将ArrayList以流的形式,通过ObjectInputStream/ObjectOutputStream来写/读。
ArrayList的特点是底层数据结构采用数组实现。数组中,元素的存储空间单位是连续的(支持随机访问),通过下标查询效率很高。但是数组的插入和删除效率不会很高,思考下数组每次插入或删除时都可能要进行大量的数组元素的移动;因此ArrayList适用于查询较多的场合,不适合插入或删除较多的场合。
推荐文档:https://mp.weixin.qq.com/s/Hd22c-CHQ8OZs4sY4ukZFw