【JDK1.8】JDK1.8集合源码阅读——ArrayList

在前面几篇,我们已经学习了常见了Map,下面开始阅读实现Collection接口的常见的实现类。在有了之前源码的铺垫之后,我们后面的阅读之路将会变得简单很多,因为很多Collection的结构与Map的类似,甚至有不少是直接用了Map里的方法。接下来让我们一起来看一下ArrayList的源码


二、ArrayList结构概览

ArrayList结构

顾名思义,ArrayList的结构实际就是一个Object[]。所以它的特性很明显,插入一个元素的时候,是耗时是一个常量时间O(1),在插入n个元素的时候,需要的时间就是O(n)。其他的操作中,运行的时间也是一个线性的增长(与数组中的元素个数有关)。


三、ArrayList源码阅读 3.1 ArrayList的继承关系

ArrayListExtends

其中值得一提的是RandomAccess接口,该接口的目的是这么说的:

List 实现所使用的标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。

对于实现RandomAccess这个接口的类,如ArrayList,我们在遍历的时候,使用for(int i = 0; i < size; i++)来遍历,其速度比使用Iterator快,而对于顺序访问的list,比如LinkedList,使用Iterator来访问会比使用loop来更快,有兴趣的朋友们可以试一试,循环次数越多越明显。

而其继承的AbstractList主要给ArrayList提供了诸如add,get,set,remove的集合方法。


3.2 ArrayList的成员变量

//初始化默认容量 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; // 数组能申请的最大数量 private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppfdp.html