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

Java 为什么添加到我的ArrayList中的新元素会覆盖所有以前的值?,java,arraylist,Java,Arraylist,我从数据库中检索值,创建一个新的事务对象并将其添加到ArrayList中,然后返回 问题是每次returnList.addt;调用,而不仅仅是添加事务,它还用新事务替换所有旧事务 导致这种行为的错误在哪里 public ArrayList<Transaction> getTransactions(long intervall, Map<String, String> transactionFields) { connect(); ArrayList<

我从数据库中检索值,创建一个新的事务对象并将其添加到ArrayList中,然后返回

问题是每次returnList.addt;调用,而不仅仅是添加事务,它还用新事务替换所有旧事务

导致这种行为的错误在哪里

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;
}
以下是事务类:

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 t = new Transaction(rs.getString("No"), new HashMap<String, String>());

或者只是在事务类中创建映射。

作为补充,如果在构造函数中进行防御复制,则getFieldMap中也应该有防御复制。是的,只需要传递transactionFields的deepcopy。谢谢。我建议您在调试器中逐步执行代码,因为我怀疑这不是正在发生的事情。