2015-01-12 2 views
0

CatalogHierarchy 유형의 arraylist 객체 catalogHierarchy가 있습니다.Java ArrayList 속성 변경

catalogHieriarchy 객체에는 세 가지 요소가 있습니다. 각 요소에는 headerName W hierarchyList와 같은 두 개의 속성이 있습니다. hierarchyList 요소에는 ProductHierarchy 유형의 여러 요소가 포함되어 있습니다.

headerName을 기반으로 Y 값으로 속성 값을 설정해야합니다.

내가 직면 한 문제는 headerName에 텍스트 계층 구조가 포함 된 요소에 대해서만 변경을하고 있습니다. 그러나 반복 후 catalogHierarchyFlag는 cloneList 객체의 다른 두 요소에 대해 설정됩니다.

누구든지이 문제를 해결하는 방법을 알려주십시오.

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"); 
     } 
    } 
} 
+1

'ArrayList catalogHieriarchy = "DB에서 베일";이 문장은 의미가 없습니다. – Maroun

+1

'Object # clone'은 복제되고있는 객체의 얕은 사본을 제공합니다. 이 방법을 사용하지 마십시오. –

+0

getHeaderName(). equalsIgnoreCase ("Hierarchy") 사용 방법은 어떻습니까? – ha9u63ar

답변

0

깊은 복사본과 얕은 복사본에 대해 읽으십시오. 객체를 == 연산자와 비교하면 객체가 동일한 참조를 공유한다는 것을 나타내는 true을 반환합니다. 객체의 독립 사본 (동일한 참조를 공유하지 않지만 필드에 대해 동일한 값을 갖는 사본)을 만들려면 clone() 메서드를 다시 구현하거나 다른 메서드를 제공해야합니다. java 문서를 참조하십시오.