我有一个类型为CatalogHierarchy的arraylist对象catalogHierarchy。
catalogHieriarchy对象有三个元素。每个元素都有两个属性,如headerName和hierarchyList。 hierarchyList元素包含多个ProductHierarchy类型的元素。
我必须根据headerName将属性值设置为Y.
我面临的问题是,我只对headerName包含文本Hierarchy的元素进行更改。但是在迭代之后,为cloneList对象的所有其他两个元素设置了catalogHierarchyFlag。
有谁可以帮我解决这个问题。
ArrayList<CatalogHierarchy> catalogHieriarchy = ... //values from database
List<CatalogHierarchy> cloneList = (ArrayList)catalogHieriarchy.clone();
for(int a=0;a<cloneList.size();a++){
if(cloneList.get(a).getHeaderName().contains("Hierarchy")){
List<ProductHierarchy> catalogHier = cloneList.get(a).getHierarchy();
for(int i = 0 ; i < catalogHier.size() ; i++) {
catalogHier.get(i).setCatalogHierarchyFlag("y");
}
}
}
答案 0 :(得分:0)
阅读深拷贝和浅拷贝。看起来如果您将对象与==
运算符进行比较,它将返回true
,表示对象共享相同的引用。如果要创建Object的独立副本(一个不共享相同引用但具有相同字段值的副本),则必须重新实现clone()方法或提供另一种方法。请参阅java文档。