Java: проблема связанного списка элементов - PullRequest
0 голосов
/ 24 декабря 2010

Ранее я использовал связанные списки со строками, двойными числами и т. Д., И они всегда работали точно так, как ожидалось. Но теперь я формирую связанный список элементов, и всякий раз, когда я добавляю новый элемент в список, все объекты в списке, очевидно, становятся равными последнему объекту.

Необходим код, указанный ниже:

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 соответствует только последнему добавленному элементу. 1006 *

Любая идея этой загадки будет принята с благодарностью.

Джон Донер

Ответы [ 3 ]

2 голосов
/ 24 декабря 2010

Проблема не в вашем коде. Скорее всего, вы добавляете тот же экземпляр StockInfo. Возможно, у вас есть что-то вроде:

StockInfo info = new StockInfo();
for (...) {
   info.setFoo(..);
   info.setBar(..);
   AddDiaryData(info);
}

Вы должны не повторно использовать подобные экземпляры. Вы должны каждый раз создавать новый экземпляр.

В качестве sidenote - имена методов в Java должны начинаться со строчной буквы.

1 голос
/ 24 декабря 2010

Из описанных симптомов кажется, что вы всегда добавляете ссылку на один и тот же экземпляр объекта StockInfo в свой список, а не ссылку на новую копию каждый раз.

Когдаэтот объект обновляется содержимым новой записи, все записи списка, по-видимому, изменяются, чтобы отразить эту последнюю запись.

Эта проблема находится за пределами фрагмента кода, который вы разместили, возможно, в вызывающей стороне AddDiaryDataспособ.

0 голосов
/ 24 декабря 2010

по электронной почте Ой.

Глубокая копия пожалуйста, найдите ее

DiaryStocks.add(thisdata);

Вы должны создать new StockInfo(), затем добавить в список, в противном случае вы добавляете ссылку, и она выравнивает все ссылки элементов на последнюю

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...