ArrayList元素替换为新条目

时间:2014-08-16 07:09:50

标签: java arraylist

我是Java的新手,并使用对象的ArrayList在java中编写一个小应用程序。

    Transaction trans= new Transaction();
    ArrayList<Transaction> arrTrans = new ArrayList<Transaction>(); 

当我Debug应用程序时,我可以看到当我向arrayList 所有添加新元素时,arrTrans的先前元素将被替换为新元素。

private void add(Transaction trans){
    trans.description= (String)(jTextField1.getText());
    trans.type=(String) (jComboBox1.getSelectedItem());
    trans.amount=(String)(jTextField2.getText());
    trans.date=(String)(jTextField3.getText());
arrTrans.add(trans);
}

我认为ArrayList对象为每个要添加到列表中的新元素添加新索引,并且永远不会修改以前的元素。我的代码出了什么问题?

3 个答案:

答案 0 :(得分:4)

您总是添加相同的Transaction对象并仅更新其内容。之前的元素没有被替换,它们实际上都是相同的元素。

如果将对象添加到ArrayList,则不会创建对象的自动副本。您必须每次都实例化new Transaction(),填充其字段,然后将其添加到ArrayList

您的代码可能如下所示:

private void add() {
    Transaction trans = new Transaction();
    trans.description = (String) jTextField1.getText();
    trans.type = (String) jComboBox1.getSelectedItem();
    trans.amount = (String) jTextField2.getText();
    trans.date = (String) jTextField3.getText();

    arrTrans.add(trans);
}

答案 1 :(得分:2)

您的问题是此代码

private void add(Transaction trans)

因为您正在传递一个对象并设置替换先前值的对象的值,所以执行类似这样的操作

private void add(){
Transaction trans= new Transaction();
//then set whatever you want to the obect and add the object to the list
}

答案 2 :(得分:1)

当您使用事务trans = new Transaction(); 时,您刚刚启动了一个对象。当您使用 private void add(Transaction trans){} 时,您刚刚修改了由您创建的对象。 你说你是java的新手,所以我建议你阅读有关创建对象的内容,你可以参考http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html