我添加了一个列表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]
答案 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 = [二]