我试图按值发送2D Arraylist 所以我写了下面的代码
public static void main(String[] args) {
ArrayList<List<Object>> a = new ArrayList<List<Object>>();
for (int i = 0; i < 10; i++) {
List in_a = Arrays.asList("aa","bb","cc","dd");
a.add(in_a);
}
// THE FOLLOWING WOULD WORK IN A 1D ARRAY, BUT NOT 2D
// ArrayList<List<Object>> b = new ArrayList < List<Object> > (a);
// THIS IS MY WORKING SOLUTION
ArrayList < List<Object> > b = new ArrayList < List<Object> >() ;
for (int i = 0; i < a.size(); i++) {
List in_b = new ArrayList(a.get(i));
b.add(in_b);
}
b.get(1).set( 3, "33");
System.out.println("a.get(1).get(3) = " + a.get(1).get(3));
System.out.println("b.get(1).get(3) = " + b.get(1).get(3));
}
但我不喜欢这个解决方案
有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
由于列表只能包含Objects
或扩展Object
(所有这些)的类,因此您只会将引用强制复制到新列表中。因此,如果您想要“2D-List”的1:1副本,则需要循环“第一维”并复制“第二维”:
ArrayList<List<Object>> c = new ArrayList<>();
for(List in_a : a){
c.add(new ArrayList<>(in_a));
}
这只是你在循环中所做的简短版本。因此,我们创建了一个新的ArrayList c
,并用a
中的每个子列表的副本填充它。
但要注意,我在这里使用增强循环(没有索引),因此无法保证c
与a
的顺序相同(尽管坦率地说,你应该没问题)
答案 1 :(得分:0)
您可以尝试使用clone()方法:
ArrayList <List<Object>> originalList = new ArrayList <List<Object>>();
// ...
ArrayList <List<Object>> list2D = new ArrayList <List<Object>>();
for (List<Object> list : originalList) {
list2D.add(list.clone());
}