Java 如何制作列表类型对象的副本(深度副本)<;列表<;整数>&燃气轮机;按价值计算?

Java 如何制作列表类型对象的副本(深度副本)<;列表<;整数>&燃气轮机;按价值计算?,java,object,arraylist,Java,Object,Arraylist,我尝试了很多方法来复制一个对象而不引用它,在我看来,它们都是浅拷贝而不是深拷贝 假设我使用main中的参数将java List类型的对象发送到一个方法 无效反向矩阵(列表网格) { } 所以我定义了List>tempGrid=newarraylist();在上面的这个方法中,我想复制所有的值(按值而不是按引用) 我尝试了迭代器,如下所示: Iterator Iterator=grid.Iterator(); while(iterator.hasNext()){ add(iterator.nex

我尝试了很多方法来复制一个对象而不引用它,在我看来,它们都是浅拷贝而不是深拷贝

假设我使用main中的参数将
java List
类型的对象发送到一个方法

无效反向矩阵(列表网格)
{
}
所以我定义了List>tempGrid=newarraylist();在上面的这个方法中,我想复制所有的值(按值而不是按引用)

我尝试了迭代器,如下所示:

Iterator Iterator=grid.Iterator();
while(iterator.hasNext()){
add(iterator.next());
}
在上面应用代码之后,仍然要更改父对象(网格)而不是tempGrid

如果我应用了这个代码
javatempgrid.get(0).set(0,1)
它也将改变网格

我看到了一些关于按值迭代的主题

List temp1=new ArrayList();
用于(列表:网格){
for(整数编号:列表){
temp1.添加(麻木);
}
tempGrid.add(temp1);
}
我试图使用Collections.copy,但给我一个错误,des大小不适合源

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

对象是不可变的,因此不需要对它们进行深度复制

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

使用不需要Java 8的代码:

static void deepCopy(列表输入){
列表输出=新的ArrayList(input.size());
用于(列表内部:输入)
add(新的ArrayList(内部));
返回输出;
}