前言
最近在面试中,面试的几家公司几乎都问到了是否看过 Java 的源码,我只能回答没有看过。在之前的学习中,确实忽略了看源码这一重要的学习手段。
最近准备看一看面试中常问的一些关于 Java 源码的。
ArrayList
ArrayList 和 LinkedList 是面试中几乎必问的,所以今天先分析一下 ArrayList 的源码。
原理
ArrayList 是我们使用最多的集合,内部是动态数组实现的,其容量是自动增长的。
本身是非线程安全的,没有同步方面的开销,只能用在单线程环境下,多线程环境下,可以考虑 Java 并发包下提供的 CopyOnWriteArrayList 类。
源码分析
//默认的初始容量
private static final int DEFAULT_CAPACITY = 10;
//空数组
private static final Object[] EMPTY_ELEMENTDATA = {};
//使用默认初始容量的空数组
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//保存数据的数组
transient Object[] elementData;
//实际数据大小
private int size;
//==================三种构造函数=======================
/