前言:关于ArrayList相信大家都不陌生。而且大多数人应该都点开过它的源码浏览过。不过看到了什么,记住了什么,这是个值得深思的问题。博主今天写这篇文章的重点也不是解析其源码。更多的是想和大家分享一下看源码的一种方法以及一种思路。
源码解析第一步:简单了解其特性
ArrayList特点:
- ArrayList是有序的(放入顺序)
- ArrayList元素是不唯一的(可存放重复元素)
ArrayList简介:
- ArrayList底层是由数组实现的
- 他的容量是动态增长的
- 操作元素时查询效率高,增删效率低
源码解析第二步:提出自己的疑问,带着问题去读源码
- ArrayList是如何实现有序的
- ArrayList是如何扩容的
- ArrayList为何查询效率高,增删效率低
- ArrayList如何转换为数组
源码解析第三步:解读其继承与实现
现在让我们打开其源码,简单的读了读类注释,大体意思就是:它是一个集合框架,它是由数组实现的,它的容量可以自动扩充,它是线程不安全的以及迭代相关的一些说明;还有建议我们去看的一些类@see
/**
*
* @author Josh Bloch
* @author Neal Gafter
* @see Collection
* @see List
* @see LinkedList
* @see Vector
* @since 1.2
*/
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
我们可以看到他继承了AbstractList抽象类,实现了 List, RandomAccess, Cloneable, java.io.Serializable 这些接口。
- 继承了AbstractList,实现了List:AbstractList是个抽象类,抽象类一般用来提取一些共有的属性。简单看下他有add(),get(),set(),remove()等方法。
- 实现了RandomAccess接口:点进去看了眼啥也没有!查了下RandomAccess 是一个标志接口,表明实现这个接口的 List 集合是支持快速随机访问的。
- 实现了Cloneable 接口:点进去看了眼还是啥也没有!查了下实现这个接口