- - PR -
ArrayListの使用について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-09-21 00:10
たこらです。
ArrayListで、addした内容をgetして取り出そうとしていますが、getした値が全て 最後にaddした値になってしまいます。 public class value { private int num; public value(){ num=0; } public int getNum() { return num; } public void setNum(int i) { num = i; } } ========================== ArrayList array_a = new ArrayList(); int i; value vl=new value(); for (i=0;i<3;i++) { vl.setNum(i); array_a.add(vl); } ================ でArrayListに値を設定し、 ================ int size;//ArrayListのサイズ int l; int c[3];//格納配列 value vl = new value(); size = array_a.size(); for (l=0;l<size;l++){ vl = (value)array_a.get(l); c[l] = vl.getNum(); } 上記で、c[0]=0,c[1]=1,c[2]=2を期待しているのですが、 c[0]=2,c[1]=2,c[2]=2 となってしまいます。 上記でおかしい点はあるでしょうか? |
|
投稿日時: 2004-09-21 00:18
int i;
value vl=new value(); for (i=0;i<3;i++) { vl.setNum(i); array_a.add(vl); } ですが、ループの前にインスタンスを一つ生成してますよね。 そのインスタンスはループでArrayListに追加しても 同一インスタンスになりますので、 ArrayListに格納されているものは、同一のインスタンスになります。 つまり、setNumを行うとArrayListに 格納されているすべての要素が影響を受けます。 ループの中でインスタンスを生成すれば、 ArrayListには別々のインスタンスが格納されますので、 たこらさんの期待した状態になります。 |
|
投稿日時: 2004-09-21 01:32
ありがとうございました。
ループ中でインスタンス生成することで期待通りの結果をえることができました。 |
1
