2012-01-25 15 views
1

非常にシンプルですが、どういうわけか機能しません(奇妙です!)。Java:オブジェクトのリストにオブジェクトを追加する

私はクラスタイプのリストを持っています。 forループのリストにオブジェクトを追加しています。オブジェクトを追加するまではすべてOKですが、リストにアクセスしようとすると、最後のオブジェクトの値だけが表示されます(下に示した出力を参照)。

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の大きさはである場合)、このプログラムの出力は次のとおりです:

ここ
//'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