Java:项目链表问题
我以前使用过字符串、双精度等的链表,它们总是完全按照预期工作。但现在我正在形成一个项目的链接列表,每当我向列表中添加一个新元素时,列表中的所有对象显然都与最后一个对象相等 基本代码如下:Java:项目链表问题,java,linked-list,Java,Linked List,我以前使用过字符串、双精度等的链表,它们总是完全按照预期工作。但现在我正在形成一个项目的链接列表,每当我向列表中添加一个新元素时,列表中的所有对象显然都与最后一个对象相等 基本代码如下: import java.util.*; public class Global { static public LinkedList<StockInfo> DiaryStocks = new LinkedList<StockInfo>(); static public cl
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;
}
}
}
import java.util.*;
公共类全球
{
静态public LinkedList DiaryStocks=new LinkedList();
静态公共类StockInfo//与每个库存日志相关的信息
{
字符串记录日期;
弦乐器;
智力状态;
字符串日期;
字符串日期;
双倍买入价;
双倍售价;
双股;
}//股票信息
//以下函数将股票的日记数据放在arraylist中
静态公共void AddDiaryData(StockInfo thisdata)
{
字符串tckr;
int i;
添加(此数据);
对于(i=0;i
正如我所说的,当单步执行底部附近的调试代码时,每次我向列表中添加一个新项时,列表的大小都会按应有的大小增长,但tckr项只对应于最后添加的项
对这个谜题的任何见解都将不胜感激
John Doner问题超出了您提供的代码范围。您很可能正在添加相同的
StockInfo
实例。也许你有这样的想法:
StockInfo info = new StockInfo();
for (...) {
info.setFoo(..);
info.setBar(..);
AddDiaryData(info);
}
您应该而不是重用这样的实例。每次都应该创建一个新实例
作为旁注-Java中的方法名称应以小写字母开头。问题不在您提供的代码范围内。您很可能正在添加相同的
StockInfo
实例。也许你有这样的想法:
StockInfo info = new StockInfo();
for (...) {
info.setFoo(..);
info.setBar(..);
AddDiaryData(info);
}
您应该而不是重用这样的实例。每次都应该创建一个新实例
作为旁注-Java中的方法名称应该以小写字母开头。从您描述的症状来看,似乎您总是在列表中添加对同一
StockInfo
对象实例的引用,而不是每次都添加对新副本的引用
当使用新条目的内容更新该对象时,所有列表条目都会发生更改以反映最新条目
这个问题不在您发布的代码片段中,可能在
AddDiaryData
方法的调用方中。从您描述的症状来看,似乎您总是在列表中添加对同一StockInfo
对象实例的引用,而不是每次都添加对新副本的引用
当使用新条目的内容更新该对象时,所有列表条目都会发生更改以反映最新条目
这个问题不在您发布的代码片段中,可能在AddDiaryData
方法的调用方中。Ooops
深度复制请搜索
DiaryStocks.add(thisdata);
您应该创建new StockInfo()
,然后添加到列表中,否则您将添加引用,并将所有项目引用均衡到最后一个项目中
深度复制请搜索
DiaryStocks.add(thisdata);
您应该创建
new StockInfo()
,然后添加到列表中,否则您会添加引用,并使所有项目引用与最后一个项目相等您能否澄清“但tckr项目仅对应于最后添加的项目”的含义?每次通过循环时,您都会覆盖tckr变量,因此在循环之后,它将始终设置为最后一项。你是说它在循环中每次都被赋予相同的值吗?我们是否假设您的数据对此变量具有不同的值?您能否澄清“但tckr项目仅对应于最后添加的项目”的含义?每次通过循环时,您都会覆盖tckr变量,因此在循环之后,它将始终设置为最后一项。你是说它在循环中每次都被赋予相同的值吗?我们是不是要假设你的数据对于这个变量有不同的值?