目录
一.什么是List
1.定义
- 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列等。
- 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
- 在集合框架中,List是一个接口,继承自Collection。
- Collection也是一个接口,继承自Iterable。
- Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的。
站在数据结构的角度来看,List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列可以执行增删改查以及变量等操作。
Collection接口中规范了后序容器中常用的一些方法:
Iterable接口中中常用的一些方法:
查看官方文档:List的官方文档
2.关于迭代的两个接口
(1).Iterable
具备迭代能力。
方法:
- iterator(小写):方法名 返回一个可以被使用的迭代器,具备迭代能力。
- Iterator(大写):类名 返回值是一个迭代器。
(2).Iterator
迭代器。
- hasNext:返回值是boolean类型,true代表有(合法)这个元素,false代表没有(异常)这个元素。
- next:返回元素。
3.结构
元素和元素之间出现线性的结构——每个元素都有一个独一无二的位置与其关联:位置(下标)。
问:一个List一共有多少个元素size() ?
答:合法位置(下标)的取值范围:[0,size)
(1).[0]:是第一个元素,也就是:头(head)。
(2).[size-1]:是最后一个元素,也就是:尾(tail/last)。
(3).除了第一个元素和最后一个元素,其余的元素:
- 都有逻辑上的前一个元素——前驱元素。
- 都有逻辑上的后一个元素——后继元素。
排序的能力是线性结构独有的,下标概念也是线性结构独有的,可以根据下标获取/设置元素。
二.常用方法
方法 | 解释 |
boolean add(E e) | 尾插 (放在集合的最后)e(可以插入size下标的元素) |
void add(int index, E element) | 将 e 插入到 index 位置 |
boolean addAll(Collection<? extends E> c) | 尾插 c 中的元素 |
E remove(int index) | 删除 index 位置元素(不可以删除size下标的元素) |
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<E> subList(int fromIndex, int toIndex) | 截取部分 list(包含fromIndex,不包含toIndex) |
三. List的使用
- 注意:List是个接口,并不能直接用来实例化。
如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。
如有建议或想法,欢迎一起讨论学习~