2012-01-25 7 views
1

매우 간단하지만 어떻게 든 작동하지 않습니다 (이상한 !!).자바 : 객체 목록에 객체 추가

클래스 유형 목록이 있습니다. for 루프의 목록에 객체를 추가하려고합니다. 객체를 추가 할 때까지 모든 것이 정상이지만 목록에 액세스하자 마자 마지막 객체의 값만 표시됩니다 (아래에 표시된 출력 참조).

List<myClass> myClassList = new ArrayList<myClass>(); 
    myClass myClassObj = new myClass(); 

    for(int i=0;i<someArray.length;i++){ 
     myClassObj.setProperty1("value1"); 
     myClassObj.setProperty2("value2"); 
     myClassObj.setProperty3("value3"); 
     ... 
     ...Others 
     ... 
     System.out.println(myClassList.add(myClassObj));//////////////////////// 
    } 

    System.out.println(myClassList.size());///////////////////////////////////// 

    for(int i=0;i<myClassList.size();i++){ 
     System.out.println(myClassList.get(i).getProperty1());///////////////// 
     ..... 
     .....Others 
     ..... 
    } 
    Iterator<myClass> mcItr = myClassList.iterator(); 
    while(mcItr.hasNext()){ 
     myClass obj = mcItr.next(); 
     System.out.println(obj.getProperty1()); 
     ..... 
     .....Others 
     ..... 
    } 

이 프로그램의 출력은 (someArray의 크기 인 경우 5) : 여기

//'true' --> 5 times. Printed by the 'add' statement as it returns 'true' when everything is OK 

    //5 --> Size of 'myClassList' this is also OK 

    //Here the values corresponding to the fifth and the last object are printed and repeated 5 times. Instead of printing each objects value once. (whichever way of printing to console I may use, the result is same). 

내가 만드는 오전 여부 나는 알아낼 수 없습니다 또한 여기에 코드입니다 잘못된 방식으로 목록을 보거나 잘못된 방식으로 액세스하십시오.

상담하십시오.

감사합니다.

+0

같은 클래스에 refrence 당신은 둘 필요가 범인 –

+0

입니다 '= 새로운 myClass가 myClass가 myClassObj를();' 첫 번째 FOR 루프 내부. 다른 경우 단순히 초기 변수를 새 값으로 덮어 쓰는 것입니다. – Frankline

+0

@UmeshAwasthi : 알겠습니다. 감사!! – kanishk

답변

5

목록을 채울 때 참조 을 동일한 개체에 반복하여 추가합니다. 해결하려면, 루프에 myClassObj 초기화를 이동 :이 목록의 모든 요소에 대해 별도의 객체를 생성합니다

for(int i=0;i<someArray.length;i++){ 
    myClass myClassObj = new myClass(); // <---- moved this into the loop 
    myClassObj.setProperty1("value1"); 

.

+0

오 예! 당신 말이 맞아요 !! 나는 그게 그렇게 될 줄 알았어. 감사!! – kanishk

+1

@kanishk 도움이 된 답변을 수락하는 것을 잊지 마십시오. –

+0

@NickBull : 10-15 분까지 답변을 수락 할 수 없습니다. 곧하려고 했어. 어쨌든 알림 주셔서 감사드립니다 :) !! – kanishk

2

매번 myClassObj를 새로 작성해야하며 코드는 동일한 오브젝트 참조를 사용합니다.

List<myClass> myClassList = new ArrayList<myClass>(); 

    for(int i=0;i<someArray.length;i++){ 
     myClass myClassObj = new myClass(); // HERE 
     myClassObj.setProperty1("value1");  
     ... 
     System.out.println(myClassList.add(myClassObj));//////////////////////// 
    } 
+0

당신은 저를 때려 눕 힙니다! – adarshr

+0

감사합니다. 알았다 – kanishk