如何通过值对列表类型List [[>的对象进行复制(深层复制)?

问题描述 投票:0回答:2
我尝试了许多方法来复制对象而不引用它,在我看来,所有这些方法都浅复制不深。

比方说,我已使用main参数向方法发送了java List<List<Integer>>类型的对象。

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

所以我定义了列表> tempGrid = new ArrayList <>();在上面的此方法中,我要复制所有值(按值而不是按引用。)

我尝试了Iterator,如下所示:

Iterator<List<Integer>> iterator = grid.iterator(); while(iterator.hasNext()){ tempGrid.add(iterator.next()); }

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

如果我应用了此代码java tempGrid.get(0).set(0,1);它也会改变网格。

我看到了一些有关通过值进行迭代的主题。

List<Integer> temp1 = new ArrayList<>(); for(List<Integer> list: grid){ for(Integer numb: list) { temp1.add(numb); } tempGrid.add(temp1); }

我尝试使用Collections.copy,但给我错误,说明大小不适合源。

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

java object arraylist
2个回答
0
投票

0
投票
外部和内部列表都是可变的,因此需要复制它们。假设我们不需要保留列表

type,例如IntegerArrayList,我们可以简单地使用ArrayList构造函数来复制内部列表。

使用不需要Java 8的代码:

LinkedList
© www.soinside.com 2019 - 2024. All rights reserved.