【问题标题】:Add an ArrayList to another ArrayList [duplicate]将 ArrayList 添加到另一个 ArrayList [重复]
【发布时间】: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;();

标签: java file arraylist multidimensional-array


【解决方案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();

希望对你有帮助。

【讨论】:

  • 谢谢兄弟!这太有帮助了!它有效
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
相关资源
最近更新 更多