一、ArrayList的继承体系及性质
1.ArrayList的继承体系
ArrayList类继承AbstractList类,实现List等多个接口:
AbstractList类又继承AbstractCollection类,实现List接口:
AbstractCollection类实现Collection接口:
Collection接口继承Iterable接口:
List接口继承Collection接口:
所以ArrayList总体继承体系为:
二、ArrayList的方法使用和源码解析
1.构造方法:
1 | private Object[] array; //定义一个泛型的数组array |
默认情况下使用ArrayList会生成一个大小为10的Object类型的数组。
实例:
1 | public static void main(String[] args) { |
2.add(T e)方法
功能:在末尾添加一个元素。
1 |
|
在数组的末尾元素时,当前的数组长度加一。
3.add(int index, T e)方法
功能:在指定下标 index 位置中设置一个元素,返回旧值
说明:加入元素e之前先要检查数组到大小首先检查index的值是否在0到size之间,可以为size.然后将index以及后面的元素向后面移动一位,将e放在index位置,size++。如果下标index不在0到size之间,则说明数组越界。
1 |
|
4.set(int index, T e)方法
功能:在指定下标 index 位置中设置一个元素,返回旧值
1 |
|
将e放到ArrayList下标为index的位置,此时就要分情况来讨论:
- 当 index < 0 或者 index > size,说明数组越界了
- 当 index = size 时,相当于数组在末尾添加了一个新的元素,此时直接把元素e放在下标等于index的位置,当前size++。
- 当 0<=index<size 时,说明在当前数组内,则直接把直接把元素e放在下标等于index的位置/
5.get(int index)方法
功能:返回指定下标为index的元素
1 |
|
说明:获取指定元素的时候,当 0<=index<size 时,此时在数组内,返回指定下标元素,其余情况数组越界会抛异常。
6.remove(int index)方法
功能:根据指定下标 index 删除指定元素,并返回删除的值
1 |
|
说明: 删除指定下标为index的元素的值前,首先要确定其范围,当 0<=index<size 时,此时在数组内,可以进行删除操作。首先获取要删除的元素的值将其定义成一个泛型 m,随后将下标为index后面的元素往前移动一位,比如将array[index+1]移动到array[index]上,以此类推,然后数组当前大小还要-1,最后返回删除的m的值。如果不在0<=index<size视为数组越界。
7.boolean remove(Object o)方法
功能: 删除指定的值为e,并返回是否删除成功
1 |
|
8.int size()方法
功能: 获取列表大小
1 | public int size() { |
9.boolean isEmpty()方法
功能: 判断是否为空
1 |
|
10.forEach(Consumer
功能:遍历整改数组
1 |
|
三、总结
Arraylist实现是基于动态数组点数据结构,动态大小是可变的,随机访问和遍历元素时,提供更好的性能。读的速度很无奈快,删除很麻烦。
推荐:
