簡體   English   中英

數組列表。 奇怪的事情

[英]ArrayList. Strange things

我有代碼:

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);

如您所見,我添加了不同的元素。 但是結果是數組列表中的所有元素都是相同的。 因此,添加2nd,3-d ...元素會將所有先前的元素更改為最后一個“ record”的值。 怎么了? 謝謝?

ArrayList保留了對對象的引用列表。 您總是在修改同一原始對象,這意味着引用相同,但是其值不同。

您可以通過將新實例顯式分配給record變量來解決此問題:

record.year=12;
record.val=55;
recList.add(record);


record = new Record();
record.year=13;
record.val=77;
recList.add(record);

您需要實例化新對象,以便它們在物理上是不同的對象。 現在,您只有一個對象多次位於ArrayList中。

Record record = new Record();

另外,由於要使用集合,因此應在記錄中添加hashCode()和equals()。

如您所見,我添加了不同的元素

不,您只是編輯了舊的Record對象並再次添加了它。 每次添加Record對象之前,都需要創建一個new對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM