Java:链接项目列表问题

时间:2010-12-24 16:15:10

标签: java linked-list

我之前使用了链接列表,包括字符串,双打等,它们总是按预期工作。但是现在我正在形成一个链接的项目列表,每当我向列表中添加一个新元素时,列表中的所有对象显然都等于最后一个对象。

基本代码如下:

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

3 个答案:

答案 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()然后添加到列表中,否则你添加引用并将项目的所有引用均衡到最后一个