目录
一:简单认识List
1.1:什么是List
1.2:List的常用方法
1.3:List的使用
二:ArrayList简介
三:ArrayList的使用
3.1:ArrayList的构造
3.2:ArrayList的常见操作
3.3:ArrayList的遍历
3.4: ArrayList的扩容机制
在我们认识ArrayList之前,我们先简单了解一下List吧。
一:简单认识List
1.1:什么是List
在集合框架中,List是一个接口,继承自Collection。
Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,如下所示:
Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下:
站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作。
1.2:List的常用方法
| 方法 | 解释 |
|---|---|
| boolean add(E e) | 尾插 e |
| void add(int index, E element) | 将 e 插入到 index 位置 |
| boolean addAll(Collectionc) | 尾插 c 中的元素 |
| E remove(int index) | 删除 index 位置元素 |
| boolean remove(Object o) | 删除遇到的第一个 o |
| E get(int index) | 获取下标 index 位置元素 |
| E set(int index, E element) | 将下标 index 位置元素设置为 element |
| void clear() | 清空 |
| boolean contains(Object o) | 判断 o 是否在线性表中 |
| int indexOf(Object o) | 返回第一个 o 所在下标 |
| int lastIndexOf(Object o) | 返回最后一个 o 的下标 |
| List | 截取部分list |
1.3:List的使用
注意:List是个接口,并不能直接用来实例化。
如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和linkedList都实现了List接口。
二:ArrayList简介
在集合框架中,ArrayList是一个普通的类,实现了List接口
说明:
1. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问。
2. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的 。
3. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的 。
4.Vector和ArrayList都是顺序表,底层空间存储时都是连续的。唯一的不同就是,ArrayList不是线程安全的,在单线程下可以使用。Vector是线程安全的(Vector里的方法有synchronized修饰)在多线程中可以选择Vector或者 CopyOnWriteArrayList(写时拷贝)。
5. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。
三:ArrayList的使用
3.1:ArrayList的构造
| 方法 | 解释 |
|---|---|
| ArrayList() | 无参构造 |
| ArrayList(Collection c) | 利用其他 Collection 构建 ArrayList |
| ArrayList(int initialCapacity) | 指定顺序表初始容量 |
3.2:ArrayList的常见操作
| 方法 | 解释 |
|---|---|
| boolean add(E e) | 尾插 e |
| void add(int index, E element) | 将 e 插入到 index 位置 |
| boolean addAll(Collection c) | 尾插 c 中的元素 |
| E remove(int index) | 删除 index 位置元素 |
| boolean remove(Object o) | 删除遇到的第一个 o |
| E get(int index) | 获取下标 index 位置元素 |
| E set(int index, E element) | 将下标 index 位置元素设置为 element |
| void clear() | 清空 |
| boolean contains(Object o) | 判断 o 是否在线性表中 |
| int indexOf(Object o) | 返回第一个 o 所在下标 |
| int lastIndexOf(Object o) | 返回最后一个 o 所在下标 |
| List | 截取部分list |
3.3:ArrayList的遍历
ArrayList 可以使用三方方式遍历:for循环+下标、foreach、使用迭代器
3.4: ArrayList的扩容机制
以上代码好吗?不好的话不好在哪?
肯定是不好的,循环要循环100次,运行时间长不说,如果底层空间不大,可能循环一次还都得扩一次容。每一次扩容所经历的操作都是开辟更大的空间,将旧空间的元素拷贝过来,这个过程很耗时。
假设底层空间只能容纳十个元素。
如果要循环100次,可以提前给好底层空间,这样就不用再扩容了。
ArrayList是一个动态类型的顺序表,即:在插入元素的过程中会自动扩容。



