Java arraylist复制-克隆?
我试图复制一个Java arraylist复制-克隆?,java,list,clone,equals,Java,List,Clone,Equals,我试图复制一个ArrayList,但它似乎只是引用它,而不是真正复制它 我的代码: List<Column> columns = columnData(referencedField.table); List<Field> newPath = new ArrayList<>(startPath); System.out.println("Equals? " + (newPath.equals(startPath))); 现在我读过关于克隆它的书,但我在这方面
ArrayList
,但它似乎只是引用它,而不是真正复制它
我的代码:
List<Column> columns = columnData(referencedField.table);
List<Field> newPath = new ArrayList<>(startPath);
System.out.println("Equals? " + (newPath.equals(startPath)));
现在我读过关于克隆它的书,但我在这方面没有经验。实际上,我想知道克隆是否真的会创建一个新对象列表,使它们不再相等,因为对于相同的内容,元素将相等
换言之,我想要的是:确保
startPath
和newPath
不相等,因此不相互引用,因为我使用的是一个递归函数,它应该将列表添加到映射中。如果在类中使用重写的equals方法而不是引用的equals,则复制的集合将等于原始集合:-)
如果您已经正确地重写了equals方法,那么就不可能不这样做。无论你如何克隆或复制它,它们都是一样的
让我详细说明一下
List<Field> newPath = new ArrayList<>(startPath);
它将迭代元素,并使用equals
方法比较所有元素。如果元素类型的等值方法被重写以考虑它的状态,而不是默认引用相等(如您的代码>字段< /Class >类),那么两个列表中的所有元素都是相等的。
因为它们的数据是相等的,即使它们不是相同的对象。如果在类中使用重写的equals方法而不是引用的equals,则复制的集合将等于原始集合:-) 如果您已经正确地重写了equals方法,那么就不可能不这样做。无论你如何克隆或复制它,它们都是一样的 让我详细说明一下
List<Field> newPath = new ArrayList<>(startPath);
它将迭代元素,并使用equals
方法比较所有元素。如果元素类型的等值方法被重写以考虑它的状态,而不是默认引用相等(如您的代码>字段< /Class >类),那么两个列表中的所有元素都是相等的。
因为它们的数据是相等的,即使它们不是相同的对象。您需要进行深度复制
List<Field> newPath = new ArrayList<>();
for(Field field: startPath){
newPath.add(field.clone());
}
List newPath=newarraylist();
用于(字段:startPath){
newPath.add(field.clone());
}
您需要进行深度复制
List<Field> newPath = new ArrayList<>();
for(Field field: startPath){
newPath.add(field.clone());
}
List newPath=newarraylist();
用于(字段:startPath){
newPath.add(field.clone());
}
如果我们考虑参考平等,是的,这将有所帮助。但是现在如果检查值是否相等,如果我们考虑引用相等,那么这会有所帮助。但是现在如果检查值是否相等,我需要将函数从递归转换为迭代,然后在每次迭代结束时存储列表。因为现在列表被“同时”修改,至少没有按顺序修改。似乎我需要将函数从递归转换为迭代,然后在每次迭代结束时存储列表。由于现在列表正在“同时”修改,至少没有按顺序修改。