2013-03-30 2 views
0

Я получаю сообщение об ошибке Параллельной Модификации Exception с этим кодом:Параллельной Модификация исключения в HashSet

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; 
} 

участниками торгами являются HashSet, содержащим лицом. Ошибка возникает у "nextBidder = (Person) iterateBids.next();" Код ищет ставку выше текущей ставки. Если он выше, он выполняет итерацию через набор участников торгов и выполняет метод bidUpdate().

Как я изменяю и повторяю в одно и то же время?

+0

Где о вы получаете исключение? – Marco

ответ

6

Единственное, что я могу видеть, что вы захватить итератора перед этой строкой:

bidders.add(bid.getBidder()); 

... что явно модификация bidders.

+0

ой, так что вы должны захватить итератор только ПОСЛЕ того, как вносите изменения. THANK YOu – Splaty

5

После получения итератора в строке 1:

Iterator iterateBids = bidders.iterator(); 

вы изменяете структуру данных в строке 4:

bidders.add(bid.getBidder()); 
+0

СПАСИБО ВАС! – Splaty

Смежные вопросы