在java中将对象添加到linkedlist/arraylist

在java中将对象添加到linkedlist/arraylist,java,arraylist,linked-list,Java,Arraylist,Linked List,我创建了一个存储类,并使用to作为arraylist/链表的数据类型 private LinkedList bid_history; 我在我的结构中已将其初始化为 bid_history=new LinkedList <Bid_History> (); 在“n”次迭代之后,我检查了列表的内容,发现列表中有“n”个元素,但它们是相同的。i、 e.我添加的最后一个元素占据了整个列表。好像我在列表中添加了一个引用变量 知道我在哪里犯了错误吗?我还使用了arraylist,同样的问题。我

我创建了一个存储类,并使用to作为arraylist/链表的数据类型

private LinkedList bid_history;
我在我的结构中已将其初始化为

bid_history=new LinkedList <Bid_History> ();
在“n”次迭代之后,我检查了列表的内容,发现列表中有“n”个元素,但它们是相同的。i、 e.我添加的最后一个元素占据了整个列表。好像我在列表中添加了一个引用变量

知道我在哪里犯了错误吗?我还使用了arraylist,同样的问题。我猜我在访问说明符上做错了什么!但是我没有主意

----增加------- 我使用递归函数

bid()
{
   int bid,quantity;
        bid_success=false;
        bid_count++;
        System.out.println("Starting to bid, Bid ID:"+bid_count);
        quantity=(int)(rated_power*duration/60);
        if(bid_history.isEmpty())
        {
            unit_price=10;
        }
        else
        {
            unit_price++;
        }
        bid=unit_price*quantity;
        //Sending the calculated bid
        send_res(unit_price,quantity,500);
        long startTimeMs = System.currentTimeMillis( );
        System.out.println("Time:"+startTimeMs);
        while(!(System.currentTimeMillis( )>(startTimeMs+2000)));
        System.out.println("Time at end:"+System.currentTimeMillis( ));

        bid_history.add(new Bid_History(bid_count,unit_price,bid_success));

        if(bid_success!=true)
        {
            bid();
        }
}
打印代码如下

int count=0,size;
size=bid_history.size();
while(count<size)
System.out.println(((Bid_History)bid_history.get(count++)).getBid_amount());
int count=0,大小;
size=bid_history.size();

虽然(count我能想到的对你的问题的唯一解释是,
bid\u count
unit\u price
bid\u success
的值在每次迭代中都不会改变。

我能想到的对你的问题的唯一解释是
bid\u count
unit\u price
bid\u success 另一种可能是BidHistory(count、price、success)没有做正确的工作,没有设置正确的字段。我不想猜测,但可能是BidHistory中没有字段,而是在类中使用静态count/price/success字段

构造函数应该是这样的(“this.”很重要):


另一种可能是BidHistory(count、price、success)没有做正确的工作,也没有设置正确的字段。我不想猜测,但可能是BidHistory中没有字段,而是在类中使用静态count/price/success字段

构造函数应该是这样的(“this.”很重要):


我建议进行以下更改以简化代码:

private final List<BidHistory> bidHistory = Lists.newLinkedList();

我选择打印每个bid的
defaultHashCode
,以检查对象是否相同。对于不相同的对象,defaultHashCode也很可能不同。

我建议进行以下更改,以简化代码:

private final List<BidHistory> bidHistory = Lists.newLinkedList();

我选择打印每个出价的
defaultHashCode
,以检查对象是否相同。对于不相同的对象,defaultHashCode也很可能不同。

您显示的代码似乎没有任何问题。显示您的(已编辑)循环代码。我们需要更多信息来帮助您。另外,您如何知道它们都是一样的?告诉我们代码Too您是否在连续迭代中更改
bid\u count、unit\u price、bid\u success
的值?
bid\u success
由另一个函数修改。它不会解决您的问题,但您应该将列表声明为列出bid_历史,使其成为参数化列表。现在,它是一个原始的LinkedList(即,可以包含任何内容的列表)。此外,请遵守Java命名约定(无下划线),仅在需要时声明变量,并使用Thread.sleep睡眠,而不是繁忙循环。您显示的代码似乎没有任何问题。显示您的(已编辑)循环代码。我们需要更多信息来帮助您。另外,您如何知道它们都是一样的?告诉我们代码Too您是否在连续迭代中更改
bid\u count、unit\u price、bid\u success
的值?
bid\u success
由另一个函数修改。它不会解决您的问题,但您应该将列表声明为列出bid_历史,使其成为参数化列表。现在,它是一个原始的LinkedList(即,可以包含任何内容的列表)。此外,请遵守Java命名约定(无下划线),仅在需要时声明变量,并使用Thread.sleep来睡眠,而不是繁忙的循环。你是对的jarek。我使用静态变量并使用eclipse来生成getter和setter,但实际上没有仔细观察。你是对的jarek。我使用静态变量并使用eclipse来生成getter和setter,而不是实际上,仔细看看。
private final List<BidHistory> bidHistory = Lists.newLinkedList();
private void printHistoryForDebugging() {
  for (BidHistory bid : bidHistory) {
    System.out.println(bid.getBidAmount() + " (hashCode " + System.defaultHashCode(bid) + ")");
  }
}