【问题标题】:Creating arraylist of arrays创建数组的arraylist
【发布时间】:2013-08-19 02:47:39
【问题描述】:

我正在尝试创建字符串数组的数组列表。完成后,我希望数组列表如下所示:

[0,0], [0,1], [1,0], [1,1,]

我尝试定义一个数组,然后将其添加到数组列表中。然后重新定义一个数组并再次添加它。但是数组列表似乎只包含最后一个条目。看看:

String[] t2 = new String[2]; 

ArrayList<String[]> list2 = new ArrayList<String[]>();

t2[0]="0";
t2[1]="0";
list2.add(t2);
t2[0]="0";
t2[1]="1";
list2.add(t2);
t2[0]="1";
t2[1]="0";
list2.add(t2);
t2[0]="1";
t2[1]="1";
list2.add(t2);

for (String[] tt : list2) 
{
System.out.print("[");
for (String s : tt)
System.out.print(s+" ");
System.out.print("]");
}

输出是:

[1,1] [1,1] [1,1] [1,1]

知道如何将每个数组添加到我的数组列表中吗?`

【问题讨论】:

  • 人们已经回答了你的问题,只是评论你为什么不这样做? list2.add(new String[] {"1","0"});

标签: java arrays string arraylist


【解决方案1】:

问题是您将相同的对象添加到 ArrayList 的每个索引中。每次修改它时,您都在修改同一个对象。要解决此问题,您必须将引用传递给不同的对象。

String[] t2 = new String[2]; 

ArrayList<String[]> list2 = new ArrayList<String[]>();

t2[0]="0";
t2[1]="0";
list2.add(t2); 

t2 = new String[2]; // create a new array
t2[0]="0";
t2[1]="1";
list2.add(t2);

t2 = new String[2];
t2[0]="1";
t2[1]="0";
list2.add(t2);

t2 = new String[2];
t2[0]="1";
t2[1]="1";
list2.add(t2);

【讨论】:

    【解决方案2】:

    您一遍又一遍地添加相同的数组t2。您需要添加不同的数组。

    ArrayList<String[]> list2 = new ArrayList<String[]>();
    
    list2.add(new String[] {"0", "0"});
    list2.add(new String[] {"0", "1"});
    list2.add(new String[] {"1", "0"});
    list2.add(new String[] {"1", "1"});
    

    顺便说一句:您可以在循环内使用Arrays.toString(tt) 来按照您的方式格式化每个String[]

    【讨论】:

      【解决方案3】:

      这是因为您将 t2 添加到所有条目中。每次覆盖 t2 时,您都会更改所有值。这是因为 t2 不是按值传递,而是按引用传递并按引用保存。

      【讨论】:

        【解决方案4】:

        您只是创建一个数组,并将其引用重复放入 ArrayList。

        相反,您可以为 List 中的每个元素创建一个新数组:

         ArrayList<String[]> list2 = new ArrayList<String[]>();
        
         String[] t2; 
        
         t2 = new String[2]; 
         t2[0]="0";
         t2[1]="0";
         list2.add(t2);
        
         t2 = new String[2]; 
         t2[0]="0";
         t2[1]="1";
         list2.add(t2);
        
         t2 = new String[2]; 
         t2[0]="1";
         t2[1]="0";
        
         t2 = new String[2]; 
         list2.add(t2);
         t2[0]="1";
         t2[1]="1";
         list2.add(t2);
        

        【讨论】:

          【解决方案5】:

          您只有一项 (t2) 并且每次将其添加到 ArrayList 中。实际上 t2 的引用将保存在 ArrayList 中,所以当您更改 t2 值时,ArrayList 中的所有引用都会生效。

          【讨论】:

            猜你喜欢
            • 2010-09-14
            • 1970-01-01
            • 2011-05-31
            • 1970-01-01
            • 2016-01-24
            • 1970-01-01
            • 1970-01-01
            • 2013-07-05
            相关资源
            最近更新 更多