为什么2D ArrayList子元素用add添加到1D ArrayList失败,直接赋值却成功
原因分析
- 第一种写法报错的核心是类型不匹配:
你声明的oneD是ArrayList<String>类型,它的add()方法要求传入的参数必须是String类型。而twoD.get(0)获取到的是二维列表里的第一个子元素,类型是ArrayList<String>,把一个列表对象传给只能接收字符串的方法,编译阶段就会触发类型校验错误,自然运行失败。 - 第二种写法类型完全匹配,所以正常运行:
twoD是ArrayList<ArrayList<String>>类型,它的get()方法返回的就是ArrayList<String>类型,你直接把这个返回值赋值给同样是ArrayList<String>类型的oneD变量,符合Java的类型规则,所以不会报错。
注意:第二种写法只是让
oneD直接引用了twoD中的第一个子列表,并没有把元素复制出来。后续你修改oneD里的元素时,twoD里对应子列表的内容也会同步变化。
正确实现需求的写法
如果你想要把二维列表里子列表的元素逐个提取出来,添加到1D列表里,可以使用addAll()方法:
ArrayList<ArrayList<String>> twoD = new ArrayList<>(); ArrayList<String> oneD = new ArrayList<String>(); // 将第一个子列表的所有元素逐个添加到oneD中 oneD.addAll(twoD.get(0));
如果要把整个二维列表的所有元素都展开到1D列表里,加一层循环即可:
for (ArrayList<String> subList : twoD) { oneD.addAll(subList); }
内容的提问来源于stack exchange,提问作者Kol256
相关产品推荐
相关产品推荐

