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

如何向List<List<String>>的内层List<String>指定位置添加元素并解决异常

异常出现原因

java.lang.UnsupportedOperationException 本质是你操作的内层List不支持add修改操作,常见触发场景如下:

  • 存入finalInfo的第一个内层List是不可变集合实例:比如用JDK9+的List.of()方法生成的集合、Arrays.asList()返回的固定长度集合,二者的实现类都没有实现add/remove这类修改方法,调用就会抛出该异常。
  • 内层List被Collections.unmodifiableList()包装成了只读视图,任何修改操作都会被拦截抛出异常。

注:如果是finalInfo为空、内层List未初始化的情况,会抛出NullPointerException而非当前异常,可排除该场景。

解决方案

根据你的业务场景选择对应处理方式即可:

  1. 存入内层List时直接使用可变实现
    往finalInfo添加内层List时,将不可变集合转为java.util.ArrayList再存入:
// 错误写法,存的是不可变集合
// finalInfo.add(List.of("a","b","c","d"));
// 正确写法,转成可变ArrayList
finalInfo.add(new ArrayList<>(List.of("a","b","c","d")));
// 如果是Arrays.asList生成的集合同理
// finalInfo.add(new ArrayList<>(Arrays.asList(arr)));

直接存入可变集合后,你原来的插入代码就可以正常运行。

  1. 无法修改存入逻辑时,操作前先转可变集合
    如果你没法修改finalInfo的内层List生成逻辑,可以在插入元素前手动转换:
// 取出原内层List
List<String> originalInner = finalInfo.get(0);
// 转为可变的ArrayList
List<String> mutableInner = new ArrayList<>(originalInner);
// 插入前先校验索引合法性,避免下标越界
if (mutableInner.size() >= 4 && tempInfo.get(0).size() >= 5) {
    mutableInner.add(4, tempInfo.get(0).get(4));
}
// 替换回finalInfo
finalInfo.set(0, mutableInner);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:07