ArrayList(JDK1.9)
一、ArrayList概念。
1、数据结构。它是一个数组,可以动态增长的数组。
2、继承实现关系图。继承抽象List,实现List、随机方法、克隆、序列化。
3、
二、内部类。
final class ArrayListSpliterator implements Spliterator<E>
private class Itr implements Iterator<E>
private class ListItr extends Itr implements ListIterator<E>
private static class SubList<E> extends AbstractList<E> implements RandomAccess
三、成员变量。
1、数组elementData。是最重要的成员。存放真实数据。
2、大小size。数组中已经存放的元素个数,而elementData.length表示数组的大小,显然size <= elementData.length。当两者相等则需要扩容。
3、数组的默认容量DEFAULT_CAPACITY。
4、数组最大容量MAX_ARRAY_SIZE。
5、空数组EMPTY_ELEMENTDATA。用户指定容量为0时返回的。
6、默认容量的空数组DEFAULTCAPACITY_EMPTY_ELEMENTDATA。
7、序列号。
3、
3、
四、成员方法。
1、构造方法1。指定数组大小。检查容量参数的合法性。确定数组大小。
2、构造方法2。不指定容量。则为空数组。
3、构造方法3。用一个集合初始化。
4、get方法。先检查参数,主要是数组下标是否越界处理。
5、扩容方法。新的容量 = 旧容量 + 旧容量/2;
新增数据的相关方法:
6、在尾部添加一个新元素。(检测是否扩容)
7、指定位置处添加元素。(检查索引合法性,必须在[0,size]范围内)
8、在尾部添加多个新元素的集合。(检测是否扩容)
9、在指定位置处开始添加多个新元素的集合。(检测是否扩容)
删除元素的相关操作:
10、删除指定位置处的元素。(检查索引合法性;复制覆盖,返回删除的数据)
11、删除指定的元素。(不存在该元素则返回false,否则返回true)
12、删除所有元素。
更新数据的相关操作:
13、更新指定位置处的元素。(检查索引合法性、保存旧的数据、新数据覆盖,返回旧数据)
查找元素的相关操作:
14、获取指定位置处的元素。
15、获取指定元素的第一个索引。(不存在则返回-1)
16、获取指定元素的倒数第一个索引。(不存在则返回-1)
17、是否存在指定元素。
其他相关操作:
18、是否为空。
19、集合大小。
20、更改数组大小为实际元素个数的大小一样大,即size == elementData.length。
4、
4、
3、
4、
3、
4、
3、
4、