将 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&lt;String&gt; arr2= new ArrayList&lt;String&gt;(); 【参考方案1】:

java 中,它处理引用,因此您必须在每次阅读该行时创建新的arr2,因为当您将arr2 添加到arr1 时,它仍然保留arr2 的引用,所以您对 arr2 所做的每项更改都会影响 arr1 内的数组 + 将要添加到 arr1 的数组 arr2(它们都是同一个数组)。

一种解决方案是像这样在while循环中声明arr2 ArrayList&lt;String&gt; arr2= new ArrayList&lt;String&gt;(); 正如@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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

面试必问之ArrayList

java用poi往excel里写数据遇到换行问题

ArrayList的使用

如何将一个 ArrayList 的内容复制到另一个?

获取ArrayList打印到另一个方法

ArrayList详细介绍