将 ArrayList 添加到另一个 ArrayList [重复]
Posted
技术标签:
【中文标题】将 ArrayList 添加到另一个 ArrayList [重复]【英文标题】:Add an ArrayList to another ArrayList [duplicate] 【发布时间】:2018-08-19 03:54:46 【问题描述】:我在向ArrayList
添加新元素时遇到问题,我会告诉你我的问题:
ArrayList<ArrayList<String>> arr1= new ArrayList<ArrayList<String>>();
ArrayList<String> arr2= new ArrayList<String>();
所以我从一个文本文件中添加新元素,逐行分割,然后逐字分割,例如: 我们假设我的文本文件包含:
a,b,c,d
e,f,g,h
i,j,k,l
我需要将每个单词放入 arr2 中,然后我将 arr2 放入 arr1 中,代码如下:
while ((line = file.readLine()) != null)
String[] words = line.split("\\,");
if (arr2.isEmpty())
for (int ae = 0; ae < words.length; ae++)
arr2.add(ae, words[ae]);
arr1.add(arr2);
else
for (int ae = 0; ae < words.length; ae++)
arr2.set(ae, words[ae]);
arr1.add(arr2);
file.close();
所以我需要的是:[[a,b,c,d],[e,f,g,h],[i,j,k,l]]
但我得到:[[i,j,k,l],[i,j,k,l],[i,j,k,l]]
有什么解决办法吗?!
【问题讨论】:
您正在添加相同的列表 (arr2) 3 次。您需要填写和添加单独(新)列表,而不是重新设置相同的列表。 你应该每次都创建一个新的ArrayList<String> arr2= new ArrayList<String>();
【参考方案1】:
在java
中,它处理引用,因此您必须在每次阅读该行时创建新的arr2
,因为当您将arr2
添加到arr1
时,它仍然保留arr2
的引用,所以您对 arr2 所做的每项更改都会影响 arr1 内的数组 + 将要添加到 arr1 的数组 arr2(它们都是同一个数组)。
一种解决方案是像这样在while循环中声明arr2
ArrayList<String> arr2= new ArrayList<String>();
正如@dehasi 在 cmets 中所说,
while ((line = file.readLine()) != null)
ArrayList<String> arr2= new ArrayList<String>();
String[] words = line.split("\\,");
for (int ae = 0; ae < words.length; ae++)
arr2.add(words[ae]);
arr1.add(arr2);
file.close();
希望对你有帮助。
【讨论】:
谢谢兄弟!这太有帮助了!它有效以上是关于将 ArrayList 添加到另一个 ArrayList [重复]的主要内容,如果未能解决你的问题,请参考以下文章