繁体   English   中英

为什么添加到ArrayList中的新元素会覆盖所有先前的值?

[英]Why does the new element added into my ArrayList overwrite all previous values?

我从数据库检索值,创建一个新的Transaction Object并将其添加到ArrayList<Transaction> ,然后返回。

问题是每次returnList.add(t); 称为,而不是仅添加事务,它还将所有旧事务替换为新事务。

导致此行为的错误在哪里?

public ArrayList<Transaction> getTransactions(long intervall, Map<String, String> transactionFields) {
    connect();
    ArrayList<Transaction> returnList = new ArrayList<Transaction>();
    Statement sta;
    ZonedDateTime now = ZonedDateTime.now(ZoneOffset.UTC);
    now = now.minusSeconds(intervall);
    try {
        sta = conn.createStatement();
        String Sql = "...";
        ResultSet rs = sta.executeQuery(Sql);
        while (rs.next()) {
            Transaction t = new Transaction(rs.getString("No"), transactionFields);
            t.set("AgentName", rs.getString("cname"));
            returnList.add(t);
        }
    } catch (SQLException e) {
        ...
    }
    disconnect();
    return returnList;
}

这是Transaction类:

public class Transaction {  
private Map<String, String> fields;

public Transaction(String number, Map<String, String> transactionFields) {
    fields = transactionFields;
    fields.put("Number", number);
}

public void set(String field, String value) {
    fields.put(field, value);
}

public String get(String field) {
    return fields.get(field);
}

public Map<String, String> getFieldMap() {
  return fields;
}
@Override
public String toString() {
    return fields.toString();

您在所有“ Transaction实例中都使用相同的Map

而是每次都传递一个新的:

Transaction t = new Transaction(rs.getString("No"), new HashMap<String, String>());

或者只是在您的Transaction类中创建Map

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM