0

我收到此代码的并发修改异常错误:

Iterator iterateBids = bidders.iterator();
     Person nextBidder;

bidders.add(bid.getBidder());

if (highestBid == null) {
    // There is no previous bid.
    highestBid = bid;
    while (iterateBids.hasNext()) {
        //nextBidder = (Person) iterateBids.next();
        ((Person) iterateBids.next()).bidUpdate(this, bid);
    }
    return true;
} else if (bid.getValue() > highestBid.getValue()) {
    // The bid is better than the previous one.
    highestBid = bid;
    while (iterateBids.hasNext()) {
        nextBidder = (Person) iterateBids.next();
        nextBidder.bidUpdate(this, bid);
    }
    return true;
}

bidders 是一个包含 Person 的 HashSet。错误发生在“nextBidder = (Person) iterateBids.next();” 代码查找高于当前出价的出价。如果更高,它将遍历投标人集并执行 bidUpdate() 方法。

我如何同时修改和迭代?

4

2 回答 2

6

我唯一能看到的是你在这一行之前抓住了迭代器:

 bidders.add( bid.getBidder() );

...这显然是对bidders.

于 2013-03-30T02:01:30.077 回答
5

在第 1 行获取迭代器后:

Iterator iterateBids = bidders.iterator();

您正在修改第 4 行的数据结构:

bidders.add( bid.getBidder() );
于 2013-03-30T02:02:21.730 回答