杰瑞科技汇

Java List嵌套List如何高效遍历与操作?

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);

注意事项

  1. 类型安全:确保嵌套 List 的类型一致,避免 ClassCastException
  2. 空指针检查:访问嵌套 List 时要检查是否为 null
  3. 性能考虑:频繁操作嵌套 List 可能影响性能,考虑使用其他数据结构如二维数组
  4. 不可变 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 在处理分组数据、矩阵表示、层次结构等场景时非常有用,但要注意合理使用以避免性能问题和维护困难。

分享:
扫描分享到社交APP
上一篇
下一篇