You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何在声明时初始化二维String类型ArrayList

二维ArrayList声明时初始化的实现方案

完全可以在声明变量时直接完成初始化,不需要逐次创建子列表、逐个add的冗长写法,根据使用的Java版本,有几种常用实现方式:

  • 兼容全Java版本的可变列表实现
    这种写法从Java 5开始就支持,生成的外层、内层列表都是完全可变的java.util.ArrayList类型,后续可以正常执行add、remove等修改操作:
ArrayList<ArrayList<String>> competitions = new ArrayList<>(Arrays.asList(
    new ArrayList<>(Arrays.asList("A", "B")),
    new ArrayList<>(Arrays.asList("B", "C")),
    new ArrayList<>(Arrays.asList("C", "A"))
));

注意:不要直接把Arrays.asList的返回值直接塞到ArrayList里,Arrays.asList返回的不是java.util.ArrayList,而是Arrays类内部的固定长度列表实现,直接使用会在后续尝试修改列表时抛出UnsupportedOperationException,必须通过new ArrayList<>(...)重新包装成真正的ArrayList。

  • Java 9及以上的简洁写法
    可以用官方提供的List.of静态工厂方法替代Arrays.asList,语法更短、空值安全性更高,同样需要把每一层用ArrayList构造器包装成可变版本:
ArrayList<ArrayList<String>> competitions = new ArrayList<>(List.of(
    new ArrayList<>(List.of("A", "B")),
    new ArrayList<>(List.of("B", "C")),
    new ArrayList<>(List.of("C", "A"))
));
  • 无需强制使用ArrayList的简化写法
    如果后续不需要对列表做修改,完全可以用List接口声明变量,不需要强制指定为ArrayList类型,代码会更简洁:
// Java 9及以上可用,返回不可变嵌套列表
List<List<String>> competitions = List.of(
    List.of("A", "B"),
    List.of("B", "C"),
    List.of("C", "A")
);

注意:该写法生成的列表是不可变的,不支持add、remove等修改操作,如果有后续变更需求,还是要使用之前的包装逻辑生成可变ArrayList。


内容的提问来源于stack exchange,提问作者MvsW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 07:24:09