java - 将一个 ArrayList 添加到另一个 ArrayList

标签 java file arraylist multidimensional-array

我在向 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/

相关文章:

java - 适用于 Android 的扫描仪(条形码)Api 无法检测到条形码

java - 行星围绕太阳旋转的循环?

javascript - 如果文件长度超过1GB,如何从客户端上传文件到服务器?

java - List<A> 引用 List<subclass-of-A>

Java冒泡排序算法

java - 每次程序运行时创建一个新的但不同的对象

java - 应该在构造函数中放入多少代码?

java - 如何检测 FIN - java 应用程序中的 tcp 标志?

java - 我正在尝试删除空格并将文本文件转换为单行

java线程通信,独立文件读写