Java List 集合详解

List 接口概述

List 是 Collection 体系中的重要分支,有序、可重复、有索引是它的三大特点。List 系列集合在 Collection 基础上增加了索引操作的相关方法,使得元素操作更加灵活。

List 特有方法

核心方法列表

方法 说明 返回值
void add(int index, E element) 在指定位置插入元素 void
E remove(int index) 删除指定索引处的元素 被删除的元素
E set(int index, E element) 修改指定索引处的元素 被修改的元素
E get(int index) 获取指定索引处的元素 指定元素

代码演示

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
public class ListMethods {
public static void main(String[] args) {
// 1. 创建List集合
List<String> list = new ArrayList<>();

// 2. 添加元素
list.add("aaa");
list.add("bbb");
list.add("ccc");
System.out.println("初始集合: " + list);

// 3. 指定位置插入元素
list.add(1, "qqq");
System.out.println("插入后: " + list);

// 4. 删除指定索引元素
String removedElement = list.remove(0);
System.out.println("删除的元素: " + removedElement);
System.out.println("删除后: " + list);

// 5. 修改指定位置元素
String oldElement = list.set(0, "modified");
System.out.println("被修改的元素: " + oldElement);

// 6. 获取指定位置元素
String element = list.get(0);
System.out.println("获取的元素: " + element);

System.out.println("最终集合: " + list);
}
}

重要注意事项

删除方法的重载问题

1
2
3
4
5
6
7
8
9
10
11
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);

// 错误做法:直接传递数字会被认为是索引
// numbers.remove(1); // 这会删除索引为1的元素(值为2),而不是删除元素1

// 正确做法:手动装箱,明确指定删除的是元素
Integer elementToRemove = Integer.valueOf(1);
numbers.remove(elementToRemove); // 这会删除值为1的元素

原理说明:Java 在方法重载时会优先匹配确切的参数类型,直接传递 int 时会调用 remove(int index) 方法,而传递 Integer 对象时会调用 remove(Object o) 方法。

List 遍历方式

List 集合支持 5 种遍历方式,每种方式都有其适用场景。

1. 迭代器遍历

1
2
3
4
5
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String s = it.next();
System.out.println(s);
}

2. 增强 for 循环

1
2
3
for(String s : list) {
System.out.println(s);
}

3. Lambda 表达式

1
list.forEach(s -> System.out.println(s));

4. 普通 for 循环

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

5. 列表迭代器(ListIterator)

1
2
3
4
5
6
7
ListIterator<String> it2 = list.listIterator();
while(it2.hasNext()) {
String str = it2.next();
if("bbb".equals(str)) {
it2.add("qqq"); // 在遍历过程中添加元素
}
}

列表迭代器特点

  • 继承自 Iterator,具备所有迭代器功能
  • 支持双向遍历(向前和向后)
  • 可以在遍历过程中添加、修改元素
  • 可以获取当前元素的索引位置

遍历方式选择指南

遍历方式 适用场景 优点 缺点
迭代器 遍历过程中需要删除元素 安全的删除操作 功能相对基础
列表迭代器 遍历过程中需要添加元素 支持遍历时修改 只能用于List系列
增强for 简单的遍历操作 语法简洁易读 不能操作索引
Lambda表达式 函数式编程风格 代码简洁现代 JDK8+支持
普通for循环 需要操作索引的场景 可以操作索引 代码相对繁琐

核心要点总结

  • List 有序性:元素按照添加顺序存储,可以通过索引精确访问
  • 方法重载:注意 remove() 方法的重载问题,数字删除需要手动装箱
  • 遍历选择:根据具体操作需求选择最合适的遍历方式
  • 功能扩展:ListIterator 在 Iterator 基础上增加了添加、修改等实用功能
提示:在实际开发中,根据具体业务需求灵活选择遍历方式,既要考虑代码的简洁性,也要保证操作的安全性。