我有代码:
private class Record {
byte year;
float val;
}
Record record=new Record();
List<Record> recList = new ArrayList<Record>();
...
//now I add first element to array list
record.year=12;
record.val=55;
recList.add(record);
//now I add second element to array list
record.year=13;
record.val=77;
recList.add(record);
如你所见,我添加了不同的元素。 但结果是数组列表中的所有元素都是相同的。 所以添加2-nd,3-d ...元素会改变以前的所有元素 到最后“记录”的值。 怎么了?感谢?
答案 0 :(得分:3)
ArrayList
会将引用列表保存到对象中。您始终修改相同的原始对象,这意味着引用相同,但其值不同。
您可以通过向record
变量显式指定新实例来修复它:
record.year=12;
record.val=55;
recList.add(record);
record = new Record();
record.year=13;
record.val=77;
recList.add(record);
答案 1 :(得分:1)
您需要实例化新对象,使它们在物理上是不同的对象。现在,您只有多个ArrayList中的一个对象。
Record record = new Record();
此外,您应该将hashCode()和equals()添加到Record中,因为您正在处理集合。
答案 2 :(得分:1)
如你所见,我添加了不同的元素
不,您刚刚编辑了旧的Record
对象并重新添加了它。每次添加Record
对象之前,您需要创建new
一个。