数组列表。奇怪的事情

时间:2013-11-18 02:43:33

标签: java

我有代码:

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 ...元素会改变以前的所有元素 到最后“记录”的值。 怎么了?感谢?

3 个答案:

答案 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一个。