[英]adding objects to linkedlist/ arraylist in java
我创建了一个存储 class 并用作我的数组列表/链接列表的数据类型。
private LinkedList bid_history;
我已在我的结构中将其初始化为
bid_history=new LinkedList <Bid_History> ();
我使用 add 将新项目添加到列表中,如下图所示
bid_history.add(new Bid_History(bid_count,unit_price,bid_success));
在“n”次迭代后,我检查了列表的内容,发现列表有“n”个元素,但它们是相同的。 即我添加的最后一个元素占据了整个列表。 就好像我在列表中添加了一个引用变量?
知道我可能在哪里犯了错误吗? 我还使用了 arraylist,同样的问题。 我猜我在访问说明符上做错了什么。 但我没有想法......
----添加-------我使用递归的function
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());
另一种可能性是 BidHistory(count, price,success) 没有做正确的工作并且没有设置正确的字段。 我不想猜测,但可能是您在 class 中使用 static 计数/价格/成功字段,而不是 BidHistory 中的字段。
构造函数应该看起来像(“this.”很重要):
public BidHistory(int count, float price, boolean success) {
this.count = count;
this.price = price;
this.success = success;
}
我能想到的对您的问题的唯一解释是bid_count
、 unit_price
和bid_success
的值在每次迭代中都不会改变。
我建议进行以下更改以使代码更容易:
private final List<BidHistory> bidHistory = Lists.newLinkedList();
final
确保该列表不能被另一个列表替换。 泛型可防止您意外将不兼容的对象添加到列表中。 它还使循环列表更容易。 来自 Google Guava 的 class Lists
保持代码简短,因为您不必两次提及通用数据类型。
BidHistory
class 中的所有字段也应设为final
,因此您以后无法更改它们。 由于这是关于历史的,因此您以后无论如何都不能更改事实。
private void printHistoryForDebugging() {
for (BidHistory bid : bidHistory) {
System.out.println(bid.getBidAmount() + " (hashCode " + System.defaultHashCode(bid) + ")");
}
}
我选择打印每个出价的defaultHashCode
以检查对象是否相同。 对于不同的对象,defaultHashCode 也很可能不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.