我在向 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]]
请问有什么解决办法吗?!
最佳答案
在 java
它涉及引用,因此您必须创建新的 arr2
每次您阅读该行时,因为当您添加 arr2
时至arr1
它仍然保留arr2
的引用同样,因此您对 arr2 所做的每个更改都会影响 arr1 内部的数组 + 将添加到 arr1 的数组 arr2 (它们都是相同的数组)。
一种解决方案是在 while 循环内声明 arr2,如下所示
ArrayList<String> arr2= new ArrayList<String>();
正如@dehasi 在评论中所说,
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();
希望有帮助。
关于java - 将一个 ArrayList 添加到另一个 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49213035/