我之前使用了链接列表,包括字符串,双打等,它们总是按预期工作。但是现在我正在形成一个链接的项目列表,每当我向列表中添加一个新元素时,列表中的所有对象显然都等于最后一个对象。
基本代码如下:
import java.util.*;
public class Global
{
static public LinkedList<StockInfo> DiaryStocks = new LinkedList<StockInfo>();
static public class StockInfo //info related to each stock in diary
{
String recordDate;
String ticker;
int status;
String buyDate;
String sellDate;
double buyPrice;
double sellPrice;
double nmbrShares;
}//StockInfo
//The following function places the Diary data for a stock in the arraylist
static public void AddDiaryData(StockInfo thisdata)
{
String tckr;
int i;
DiaryStocks.add(thisdata);
for (i = 0; i < DiaryStocks.size(); i++) //this is debug code
{
tckr = DiaryStocks.get(i).ticker;
}
}
}
正如我所说,当单步执行底部附近的调试代码时,每次向列表中添加一个新项时,列表大小都应该增加,但tckr项只对应于添加的最后一项。 / p>
非常感谢对此谜题的任何见解。
John Doner
答案 0 :(得分:2)
问题超出了您提供的代码范围。您最有可能添加StockInfo
的相同实例。也许你有类似的东西:
StockInfo info = new StockInfo();
for (...) {
info.setFoo(..);
info.setBar(..);
AddDiaryData(info);
}
你应该不重用这样的实例。您应该每次都创建一个新实例。
作为旁注 - Java中的方法名称应以小写字母开头。
答案 1 :(得分:1)
根据您描述的症状,似乎您总是在列表中添加对同一StockInfo
对象实例的引用,而不是每次都引用新副本。
当使用新条目的内容更新该对象时,所有列表条目似乎都会更改以反映最新条目。
此问题在您发布的代码段之外,可能在AddDiaryData
方法的调用方中。
答案 2 :(得分:0)
糟糕!
深层复制,请搜索
DiaryStocks.add(thisdata);
你应该创建new StockInfo()
然后添加到列表中,否则你添加引用并将项目的所有引用均衡到最后一个