Java 中 List 嵌套 List 的使用
在 Java 中,嵌套 List(即 List 中包含另一个 List)是一种常见的数据结构,用于表示二维或多维数据,下面我将详细介绍如何在 Java 中使用嵌套 List。
创建嵌套 List
基本创建方式
// 创建一个外层 List,内层也是 List
List<List<String>> nestedList = new ArrayList<>();
// 创建内层 List 并添加到外层 List
List<String> innerList1 = new ArrayList<>();
innerList1.add("A");
innerList1.add("B");
nestedList.add(innerList1);
List<String> innerList2 = new ArrayList<>();
innerList2.add("C");
innerList2.add("D");
nestedList.add(innerList2);
使用 Java 8 Stream API 创建
List<List<Integer>> numbers = IntStream.range(0, 5)
.mapToObj(i -> IntStream.range(0, 3)
.mapToObj(j -> i * 3 + j)
.collect(Collectors.toList()))
.collect(Collectors.toList());
访问嵌套 List 元素
// 获取第一个内层 List
List<String> firstInnerList = nestedList.get(0);
// 获取第一个内层 List 的第一个元素
String element = nestedList.get(0).get(0); // "A"
// 遍历嵌套 List
for (List<String> inner : nestedList) {
for (String item : inner) {
System.out.print(item + " "); // 输出: A B C D
}
}
修改嵌套 List
// 修改元素
nestedList.get(0).set(0, "X"); // 将 "A" 改为 "X"
// 添加新元素到内层 List
nestedList.get(1).add("E");
// 添加新的内层 List
List<String> newInnerList = new ArrayList<>();
newInnerList.add("F");
newInnerList.add("G");
nestedList.add(newInnerList);
常用操作示例
创建固定大小的嵌套 List
int rows = 3;
int cols = 4;
List<List<Integer>> matrix = new ArrayList<>(rows);
for (int i = 0; i < rows; i++) {
List<Integer> row = new ArrayList<>(cols);
for (int j = 0; j < cols; j++) {
row.add(i * cols + j);
}
matrix.add(row);
}
使用 Guava 库创建嵌套 List
List<List<Integer>> guavaList = Lists.newArrayList(
Lists.newArrayList(1, 2, 3),
Lists.newArrayList(4, 5, 6),
Lists.newArrayList(7, 8, 9)
);
转换为二维数组
int[][] array = nestedList.stream()
.map(inner -> inner.stream()
.mapToInt(String::parseInt)
.toArray())
.toArray(int[][]::new);
注意事项
- 类型安全:确保嵌套 List 的类型一致,避免 ClassCastException
- 空指针检查:访问嵌套 List 时要检查是否为 null
- 性能考虑:频繁操作嵌套 List 可能影响性能,考虑使用其他数据结构如二维数组
- 不可变 List:如果需要不可变嵌套 List,可以使用
Collections.unmodifiableList
完整示例
import java.util.ArrayList;
import java.util.List;
public class NestedListExample {
public static void main(String[] args) {
// 创建嵌套 List
List<List<String>> students = new ArrayList<>();
// 添加班级1的学生
List<String> class1 = new ArrayList<>();
class1.add("Alice");
class1.add("Bob");
students.add(class1);
// 添加班级2的学生
List<String> class2 = new ArrayList<>();
class2.add("Charlie");
class2.add("David");
class2.add("Eve");
students.add(class2);
// 遍历并打印所有学生
for (int i = 0; i < students.size(); i++) {
System.out.print("班级" + (i+1) + ": ");
for (String student : students.get(i)) {
System.out.print(student + " ");
}
System.out.println();
}
// 修改数据
students.get(0).set(0, "Alice Smith");
students.get(1).add("Frank");
// 使用 Java 8 遍历
students.forEach(classList -> {
classList.forEach(student -> System.out.print(student + " "));
System.out.println();
});
}
}
输出:
班级1: Alice Bob
班级2: Charlie David Eve
Alice Smith Bob
Charlie David Eve Frank
嵌套 List 在处理分组数据、矩阵表示、层次结构等场景时非常有用,但要注意合理使用以避免性能问题和维护困难。
