List<List<Integer>> res = new ArrayList<>();二维数组也是new ArrayList<>();就可以创建对象吗 详解

List<List<Integer>> res = new ArrayList<>(); 是创建一个 二维 ArrayList(即一个嵌套列表)对象的声明和初始化。要详细理解这行代码,以及如何操作和填充它,需要了解一些概念。

1. List<List<Integer>> 的含义

  • List<List<Integer>> 表示一个 二维列表,即列表的元素也是列表。它可以用于存储二维数据结构,如二维矩阵或表格。
  • ArrayList<>List 接口的一个实现类,提供了动态数组的功能。

2. 如何创建和初始化二维 ArrayList

2.1 创建二维 ArrayList 对象

当你使用 List<List<Integer>> res = new ArrayList<>(); 时:

  • res 是一个空的 ArrayList,其中没有任何内部的 List 元素
  • 这行代码只初始化了外层 List,并没有创建任何内层 List

要填充 res,还需要手动添加 ArrayList 实例到其中。

示例

List<List<Integer>> res = new ArrayList<>(); // 创建外层列表

// 创建并添加内层列表
List<Integer> innerList1 = new ArrayList<>();
innerList1.add(1);
innerList1.add(2);
res.add(innerList1);

List<Integer> innerList2 = new ArrayList<>();
innerList2.add(3);
innerList2.add(4);
res.add(innerList2);

System.out.println(res); // 输出: [[1, 2], [3, 4]]
2.2 为什么 new ArrayList<>() 不能直接创建完整的二维数组结构?
  • new ArrayList<>(); 只创建了外层列表,此时 res 是一个空列表,没有任何内层元素。
  • 要创建一个完整的二维结构,必须手动为每个内层 List 实例化并添加到外层 List 中。

3. 填充二维 ArrayList 的方法

3.1 手动填充

你可以逐一创建并添加内层 Listres

List<List<Integer>> res = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    List<Integer> innerList = new ArrayList<>();
    for (int j = 0; j < 4; j++) {
        innerList.add(j); // 填充内层列表
    }
    res.add(innerList); // 添加内层列表到外层列表
}
System.out.println(res); // 输出: [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]]
3.2 使用初始化块

可以使用嵌套的 Arrays.asList() 方法来初始化二维列表。

List<List<Integer>> res = new ArrayList<>(
    Arrays.asList(
        new ArrayList<>(Arrays.asList(1, 2, 3)),
        new ArrayList<>(Arrays.asList(4, 5, 6)),
        new ArrayList<>(Arrays.asList(7, 8, 9))
    )
);
System.out.println(res); // 输出: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

4. 常见问题与注意事项

4.1 添加内层 List 的引用
  • 如果使用同一个内层 List 对象多次添加到外层 List 中,修改内层 List 会影响到所有引用它的地方。
List<List<Integer>> res = new ArrayList<>();
List<Integer> innerList = new ArrayList<>();
innerList.add(1);
res.add(innerList);
innerList.add(2);
res.add(innerList);

System.out.println(res); // 输出: [[1, 2], [1, 2]](两个引用指向同一个 `List` 对象)

解决方法:每次都创建新的 List 对象来避免引用问题。

4.2 初始化大小
  • 可以使用 new ArrayList<>(initialCapacity)ArrayList 指定初始容量,但这仅影响它的容量而不是大小
  • 初始化后的二维 ArrayList 外层为空,必须手动添加内层 List

5. 总结

  • List<List<Integer>> res = new ArrayList<>(); 只初始化了外层 ArrayList,并没有创建内层的 List
  • 内层 List 必须显式创建并添加到外层 List 中。
  • 直接使用 new ArrayList<>() 并不能填充二维结构,它只是一个容器的起点。
  • 为了避免引用问题,每次添加内层 List 时应创建新的 List 实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞滕人生TYF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值