在前一篇文章中,我们概述了Collection的两个分支: List和Set,今天我们就来详细看看List的实现类: ArrayList。 ArrayList的继承关系如下图所示。
如上图所示,ArrayList直接继承了AbstractList,从而实现了List界面。 他是数组队列,相应地提供添加、修改、遍历等功能。
ArrayList实现了RandomAccess接口,表明它具有随机访问功能,可以使用元素的序列号快速访问元素。 这也是数组列表和链接列表的区别。
ArrayList实现了克隆接口,也就是覆盖Object的克隆(),可以克隆。
ArrayList实现了java.io.Serializable接口。 也就是说,ArrayList支持序列化,可以通过序列化进行传输。
下面将介绍数组列表的API。 首先是构造函数。 ArrayList有三个构造函数:
数组列表(、数组列表)、内部容量、数组列表)、集合? 扩展集合)。
其中ArrayList ) )是无参数构造函数,缺省大小为10。 数组(整型容量)是指定数组大小的构造函数,是数组集合吗? 扩展集合)是包含集合的数组列表。
ArrayList包含两个非常重要的成员变量:元素数据数组和整型大小。 其中,elementData是包含数组元素的Object类型数组,可以由上述构造函数指定该数组的大小,缺省值为10。size为数组的大小。
数组和数组有什么不同? 大多数人知道的是ArrayList是动态扩展的,那么ArrayList是如何扩展的呢? 让我们分析一下源代码。
确认ArrayList的大小
添加元素
如源代码所示,在添加新元素时,将调用名为ensureCapacity的方法。 该方法首先比较当前数组的大小与指定数组的大小之间的关系。 如果指定的容量无法容纳当前元素,则当前数组的大小将扩展,新容量=(旧容量*3)/2 1。 然后,将元素复制到新数组中。
ArrayList支持三种类型的导线测量。
(1)通过迭代器进行遍历,即迭代器遍历。
字符串值=空值;
迭代器=列表.迭代器(;
wile(Iter.Hasnext () ) ) ) )。
值=(字符串iter.next ) )。
}
)2) for循环遍历
字符串值=空值;
for (字符串:列表) {
值=s;
}
)3)随机访问,即通过下标进行访问
字符串值=空值;
for (英制=0; i size; I ) {2}
值=列表. get (I;
}
在这三种方法中,第三种随机访问方法最快,第一种迭代方法最慢。
今天,我们讨论了几个List的一个实现类ArrayList的几个实现。 下一篇文章将介绍几个List的另一个实现类LinkedList的实现。 敬请期待。