B站 韩顺平 老师课程的笔记

List接口

List接口的介绍

List接口是Collection的子接口

  1. List集合类中的元素有序(即添加顺序和取出顺序一致)、且可重复
  2. List集合类中的每个元素都有其对应的顺序索引,即支持索引(List特点)
  3. List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
  4. 常见的实现类有:ArrayList、LinkedList、Vector(基本一样,很多都有的方法,例如add,remove,set等)

选择使用

  • ArrayList效率高,但多线程的时候不安全,在非多线程的情况下使用ArrayList更好
  • Vector线程安全,在多线程情况下考虑用Vector更好
  • LinkedList增删效率最高,因为底层不是用数组实现的,线程也不安全

ArrayList与Vector比较

底层结构 版本 线程安全(同步)效率 扩容倍速
ArrayList 可变数组 jdk1.2 不安全,效率高 如果是有参构造器就扩容1.5倍;如果是无参,第一次讲容量设为10,从第二次开始就扩容1.5倍
Vector 可变数组Object[] jdk1.0 安全,效率不高 如果是无参,默认容量为10,满后,就按2倍扩容;如果指定大小,则每次直接2被扩容

ArrayList与LinkedList比较

底层结构 增删的效率 改查效率
ArrayList 可变数组 较低,需要数组扩容 较高,直接改下标位置值
LinkedList 双向链表 较高,通过链表追加,不需要扩容 较低,需要再建立连接等操作

所以改查多用ArrayList,改查少用LinkedList
一般来说改查用到都多,一般都是ArrayList

List常用方法介绍

常用方法:

  • void add(int index, Object ele):在 index 位置插入 ele 元素
  • boolean addAll(int index, Collection eles):从 index 位置开始将 eles 中的所有元素添加进来
  • Object get(int index):获取指定 index 位置的元素
  • int indexOf(Object obj):返回 obj 在集合中首次出现的位置
  • int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置
  • Object remove(int index):移除指定 index 位置的元素,并返回此元素
  • Object set(int index, Object ele):设置指定 index 位置的元素为 ele , 相当于是替换. list.set(1, “玛丽”);
  • List subList(int fromIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public static void main(String[] args) {
List list = new ArrayList();
list.add("张三丰");
list.add("贾宝玉");
// void add(int index, Object ele):在 index 位置插入 ele 元素
//在 index = 1 的位置插入一个对象
list.add(1, "牛人");
System.out.println("list=" + list);
// boolean addAll(int index, Collection eles):从 index 位置开始将 eles 中的所有元素添加进来
List list2 = new ArrayList();
list2.add("jack");
list2.add("tom");
list.addAll(1, list2);
System.out.println("list=" + list);
// Object get(int index):获取指定 index 位置的元素
//说过
// int indexOf(Object obj):返回 obj 在集合中首次出现的位置
System.out.println(list.indexOf("tom"));//2
// int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置
list.add("牛人");
System.out.println("list=" + list);
System.out.println(list.lastIndexOf("牛人"));
// Object remove(int index):移除指定 index 位置的元素,并返回此元素
list.remove(0);
System.out.println("list=" + list);
// Object set(int index, Object ele):设置指定 index 位置的元素为 ele , 相当于是替换. list.set(1, "玛丽");
System.out.println("list=" + list);
// List subList(int fromIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合
// 注意返回的子集合 fromIndex <= subList
List returnlist = list.subList(0, 2);
System.out.println("returnlist=" + returnlist);
}

使用普通for遍历输出

由于List有索引的特点索引可以有第三种遍历输出方式(实现了List的类都可以)
第一种为迭代器输出,第二种为增强for循环输出(底层还是迭代器输出),具体看文章集合

代码展示

1
2
3
4
for(int i = 0;i<list.size();i++){
Object object = list.get(i);
System.out.println(object);
}

常用类解析

  1. ArrayList
  2. Vector
  3. LinkedList