- PR -

ArrayListの使用について

1
投稿者投稿内容
たこら
会議室デビュー日: 2004/09/07
投稿数: 12
投稿日時: 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/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 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/07
投稿数: 12
投稿日時: 2004-09-21 01:32
ありがとうございました。

ループ中でインスタンス生成することで期待通りの結果をえることができました。
1

スキルアップ/キャリアアップ(JOB@IT)