【问题标题】:Why only the last value that we are trying to add is stored in an arraylist repeatedly为什么只有我们尝试添加的最后一个值重复存储在 arraylist 中
【发布时间】:2014-04-28 10:23:32
【问题描述】:

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

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 {
    ...
} 

【问题讨论】:

  • 请贴一些代码,你的结果取决于你实际写的,而不是你试图做的。
  • 发布您的代码,以便我们更好地帮助您
  • 因为你还没有发布你的代码..
  • 尝试{ st=con.createStatement(); rs=st.executeQuery("从数据中选择 *"); while(rs.next()){ DataBean db=new DataBean(); for(int i=1;i
  • 数组a来自哪里?

标签: java arrays arraylist


【解决方案1】:

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

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 以制作数组的副本。

【讨论】:

  • 如果我创建了一次并反复调用,那么还有其他替代方法可以做到这一点
  • @user3534517 更改 db.setArray 以复制您传递的数组,而不是存储数组:在 setArray 内部创建一个新的浮点数组,并从数组中复制你进来了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多