将ArrayList项添加到ArrayList的其他ArrayList

时间:2015-05-13 09:57:23

标签: java arraylist

我添加了一个列表a的项目,然后将列表a添加到列表b并再次执行相同操作。

我的问题是,如果我打印b.get(0)b.get(1),我会得到同样的列表"One""Two",为什么会这样?< / p>

b.get(0),我想只添加一个a.add("One")项。

添加a.add("Two")后,如果我打印b.get(1),我应该同时获得"One""Two"

是否有任何解决方案或任何变更来管理这个?

List<String> a= new ArrayList<String>();
List<List<String>> b= new ArrayList<List<String>>();

a.add("One");
b.add(a);

a.add("Two");
b.add(a);

System.out.println("b="+b.get(0));
System.out.println("b="+b.get(1));

输出:

b=[One, Two]
b=[One, Two]

3 个答案:

答案 0 :(得分:5)

您要添加两次相同的List,因此您会看到外部List的两个索引都使用相同的元素。

要添加两个不同的List,您必须在将每个元素添加到外部ArrayList之前创建新的List

a.add("One");
b.add(a);

a = new ArrayList<>(a); // assuming you want the second list to contain both "One" and "Two"
a.add("Two");
b.add(a);

答案 1 :(得分:0)

您在b [0]和b [1]中添加相同的引用。如果要在列表b上具有不同索引的不同列表,则必须创建新的列表对象

        List<String> a= new ArrayList<String>();
    List<String> c= new ArrayList<String>();
    List<List<String>> b= new ArrayList<List<String>>();
    a.add("One");
    b.add(a);

    c= new ArrayList<String>();
    c.addAll(a);
    c.add("Two");
    b.add(c);

    System.out.println("b="+b.get(0));
    System.out.println("b="+b.get(1));

答案 2 :(得分:0)

原因是在你的代码中,b.get(0)和b.get(1)指向同一个List a,所以输出是相同的。

使用此代码可以实现您想要的,         列出a1 = new ArrayList();         列出a2 = new ArrayList();         列表&gt; b = new ArrayList&gt;();

    a1.add("One");
    b.add(a1);

    a2.add("Two");
    b.add(a2);

    System.out.println("b="+b.get(0));
    System.out.println("b="+b.get(1));

输出是, B = [大] 100 B = [二]