有序,可重复,有索引。
List特有方法
collection集合体系
List集合特有方法
- List集合因为支持索引,所以多了很多索引操作的独特api,其他Collection的功能List也都继承了。
方法名称 | 说明 |
---|---|
void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get(int index) | 返回指定索引处的元素 |
List集合的遍历方式有几种?
- 迭代器
- 增强for循环
- Lambda表达式
- for循环(因为List集合存在索引)
ArrayList集合的底层原理
- ArrayList底层是基于数组实现的
- 查询速度快(注意: 是根据索引查询数据快): 查询数据通过地址值和索引定位,查询任意数据耗时相同。
- 删除效率低:可能需要把后面很多的数据进行前移。
- 添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容。
-
利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组
-
添加第一个元素时,底层会创建一个新的长度为10的数组
List<String> list1 = new ArrayList<>();list1.add("a");
-
存满时,会扩容1.5倍
-
如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准
应用场景
- ArrayList适合:
- 根据索引查询数据, 比如根据随机索引取数据(高效)! 或者数据量不是很大时
-
ArrayList不适合:
- 数据量大的同时, 又要频繁进行增删操作
List集合的遍历方式有几种?
- 迭代器
- 增强for循环
- Lambda表达式
- for循环(因为List集合存在索引)
LinkedList集合底层原理
基于双链表实现的
查询慢,增删相对较快,但对首尾元素进行增删改查的速度是极快的。
什么是链表? 有啥特点?
- 链表中的结点是独立的对象,在内存中是不连续的,每个结点包含数据值和下一个结点的地址。
特点:
- 链表的特点1:查询慢,无论查询哪个数据都要从头开始找。
- 链表的特点2:增删首尾元素是非常快的
LinkedList集合的特有功能
方法名称 | 说明 |
---|---|
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
应用场景
-
可以用来设计队列
- 先进先出, 后进后出
-
可以用来设计栈
- 后进先出,先进后出