为什么只有我们尝试添加的最后一个值重复存储在arraylist中

时间:2014-04-28 10:23:32

标签: java arrays arraylist

我正在检索单个记录的每个值并将其复制到另一个数组变量并使用bean类设置数组,然后将该bean类添加到arraylist.While我尝试打印它只显示最后一条记录反复

try{
    st=con.createStatement();
    rs=st.executeQuery("select * from data");
    while(rs.next()){
        DataBean db=new DataBean();
        for(int i=1;i<=tNumber;i++){
            a[i]=rs.getFloat(i);
        }
        db.setArray(a);
        al.add(db);
   }
} finally {
    ...
} 

2 个答案:

答案 0 :(得分:2)

最后一个条目重复存储在数组中,因为您多次存储同一个对象。这是一个非常常见的错误 - 当您编写如下代码时会发生这种错误:

MyObject obj = new MyObject();
List<MyObject> list = new ArrayList<MyObject>();
while (haveMoreEntries()) {
    obj.setName(readName());
    obj.setAddress(readAddress());
    list.add(obj);
}

上面代码的问题是它不断重复添加同一个对象。修复是将构造函数的调用移动到循环中,如下所示:

List<MyObject> list = new ArrayList<MyObject>();
while (haveMoreEntries()) {
    MyObject obj = new MyObject();
    obj.setName(readName());
    obj.setAddress(readAddress());
    list.add(obj);
}

在您的情况下,问题是共享数组a:您创建了一次,然后重复调用db.setArray(a);。您应该将a的创建移到while循环中,或者更好的是,更改db.setArray以制作数组的副本。

答案 1 :(得分:0)

bean对象必须是本地的。我想在你的情况下,你会把它变成全球性的,这就产生了问题。