文章目录
- [236. Java 集合 - 使用索引访问 List 元素](#236. Java 集合 - 使用索引访问 List 元素)
- [🎯 通过索引访问和操作单个元素](#🎯 通过索引访问和操作单个元素)
- [🔥 示例讲解](#🔥 示例讲解)
- [🔎 查找元素在 List 中的位置](#🔎 查找元素在 List 中的位置)
- [🛠️ 获取子列表(`subList`)](#🛠️ 获取子列表(
subList)) - [🚀 在指定位置插入一个集合](#🚀 在指定位置插入一个集合)
- [📚 小结](#📚 小结)
236. Java 集合 - 使用索引访问 List 元素
在 List 接口中,除了继承 Collection 的基本功能外,还**新增了一套基于索引(index)**的方法,让我们能更灵活、精准地操作元素。
🎯 通过索引访问和操作单个元素
| 方法签名 | 作用 |
|---|---|
add(int index, E element) |
在指定位置插入 元素,后续元素索引自动后移 |
get(int index) |
获取指定索引位置的元素 |
set(int index, E element) |
替换指定索引位置的元素 |
remove(int index) |
移除 指定索引位置的元素,后续元素索引前移 |
⚠️ 注意:
所有这些方法都要求索引必须是合法的范围 (
0 <= index <= size-1)。如果索引非法,将抛出
IndexOutOfBoundsException异常!
🔥 示例讲解
java
import java.util.ArrayList;
import java.util.List;
public class ListAccessExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>(List.of("Alice", "Bob", "Charlie"));
// 获取元素
System.out.println("Element at index 1: " + names.get(1)); // Bob
// 替换元素
names.set(1, "Barbara");
System.out.println("After set: " + names); // [Alice, Barbara, Charlie]
// 插入元素
names.add(1, "Brian");
System.out.println("After add: " + names); // [Alice, Brian, Barbara, Charlie]
// 移除元素
names.remove(2);
System.out.println("After remove: " + names); // [Alice, Brian, Charlie]
}
}
🖨️ 输出:
java
Element at index 1: Bob
After set: [Alice, Barbara, Charlie]
After add: [Alice, Brian, Barbara, Charlie]
After remove: [Alice, Brian, Charlie]
🔎 查找元素在 List 中的位置
有时我们需要知道某个元素在 List 中的位置索引,可以使用以下方法:
| 方法签名 | 作用 |
|---|---|
indexOf(Object o) |
返回元素第一次出现的索引,找不到返回 -1 |
lastIndexOf(Object o) |
返回元素最后一次出现的索引,找不到返回 -1 |
示例
java
List<String> colors = List.of("Red", "Green", "Blue", "Green");
System.out.println(colors.indexOf("Green")); // 1
System.out.println(colors.lastIndexOf("Green")); // 3
System.out.println(colors.indexOf("Yellow")); // -1
🛠️ 获取子列表(subList)
- 方法签名:
subList(int fromIndex, int toIndex) - 返回的是原列表的一个视图(view) ,不是新复制出来的列表!
- 任何对子列表的修改,都会同步影响到原列表,反之亦然。
⚠️ 注意:
fromIndex是包含的起点索引toIndex是不包含的终点索引- 索引非法时,抛出
IndexOutOfBoundsException
示例
java
import java.util.ArrayList;
import java.util.List;
public class SubListExample {
public static void main(String[] args) {
List<String> numbers = new ArrayList<>(List.of("0", "1", "2", "3", "4", "5"));
System.out.println("Original list: " + numbers);
// 清除索引2(含)到索引5(不含)之间的元素,即 "2", "3", "4"
numbers.subList(2, 5).clear();
System.out.println("After subList clear: " + numbers);
}
}
🖨️ 输出:
java
Original list: [0, 1, 2, 3, 4, 5]
After subList clear: [0, 1, 5]
🚀 在指定位置插入一个集合
有时需要一次性插入多个元素,可以使用:
- 方法签名:
addAll(int index, Collection<? extends E> c)
这个方法会从指定位置开始,依次插入集合中的所有元素!
示例
java
import java.util.ArrayList;
import java.util.List;
public class AddAllExample {
public static void main(String[] args) {
List<String> list = new ArrayList<>(List.of("A", "B", "F"));
List<String> newElements = List.of("C", "D", "E");
list.addAll(2, newElements);
System.out.println(list); // [A, B, C, D, E, F]
}
}
📚 小结
| 操作 | 方法 |
|---|---|
| 按索引访问元素 | get(index) |
| 替换元素 | set(index, element) |
| 插入元素 | add(index, element) |
| 移除元素 | remove(index) |
| 批量插入集合 | addAll(index, collection) |
| 获取元素位置索引 | indexOf(element), lastIndexOf(element) |
| 获取子列表 | subList(fromIndex, toIndex) |
✅ 一句话总结:
👉 "List 给了你像数组一样按位置操作元素的能力,同时保留了 Collection 的灵活性!"