others - Java - 如何将类型为<List<Integer> >的对象的副本复制为(Deep Copy)变量?

我尝试了很多方法来复制一个对象而不用引用它。

假设我已经发送了一个类型的对象 java List<List<Integer>>使用main到方法的参数。


void reverseMatrix(List<List<Integer> > grid)


{



}



所以我定义了列表gt tempGrid新ArrayList lt &gt;(); 在上面的方法中,我要复制所有值(按值而不是通过引用),

我尝试了迭代器如下:


Iterator<List<Integer>> iterator = grid.iterator();


 while(iterator.hasNext()){


 tempGrid.add(iterator.next());


 }



在应用上面的代码之后,仍然更改父对象(grid)而不是tempGrid 。

如果我应用这个代码java tempGrid.get(0).set(0,1);,它也会改变grid 。


 List<Integer> temp1 = new ArrayList<>();



 for(List<Integer> list: grid){


 for(Integer numb: list) {


 temp1.add(numb);


 }


 tempGrid.add(temp1);


 }



我尝试使用Collections.copy,但是给我错误: that des size not fit to source。

我希望得到一个不会受到旧对象的操作影响的新对象。

时间:


List<ArrayList<Integer>> copy = list.stream().map(ArrayList::new).collect(Collectors.toList());



Integer对象是不可变的,因此你不需要深入地复制它们。

外部列表和内部列表都是可变的,因此需要复制它们,假设我们不需要保留列表类型,例如,ArrayListLinkedList,我们可以简单地使用ArrayList(Collection)构造函数来复制内部列表。


static void deepCopy(List<List<Integer>> input) {


 List<List<Integer>> output = new ArrayList<>(input.size());


 for (List<Integer> inner : input)


 output.add(new ArrayList<>(inner));


 return output;


}



...