【发布时间】:2014-03-10 18:45:13
【问题描述】:
作为我程序的一部分,我坚持使用并发修改异常。这是提到的部分:
PriorityQueue<Customer> marginalGainHeap = new PriorityQueue<Customer>(
1, new Comparator<Customer>() {
public int compare(Customer c1, Customer c2) {
return Double.compare(c1.getMarginalGain(),
c2.getMarginalGain());
}
});
// set of all remains available nodes
availableNodes.removeAll(churnNet);
for (Customer avail : availableNodes) {
avail.setMarginalGain(0);
marginalGainHeap.add(avail);
}
while (seedSet.size() <= budget) {
**for (Customer remainingNode : availableNodes) {**
remainingNode.setMarginalGain(calculateMarginalGain(
remainingNode, seedSet, network, availableNodes,
churnNet));
marginalGainHeap.remove(remainingNode);
marginalGainHeap.add(remainingNode);
}
seedSet.add(marginalGainHeap.poll());
}
这里是calculateMarginalGain方法:
private int calculateMarginalGain(Customer remainingNode,
HashSet<Customer> seedSet,
DirectedSparseGraph<Customer, Transaction> net,
Set<Customer> availableNodes, HashSet<Customer> churnNetwork) {
// Marginal gain for short-term campaign
HashSet<Customer> tmp = new HashSet<Customer>(); // seedset U
// {remainingNode}
tmp.add(remainingNode);
Set<Customer> tmpAvailableNodes = availableNodes;
HashSet<Customer> NeighborOfChurn = getNeighbors(churnNetwork, net);
// sigma function for calculating the expected number of influenced
// customers- seedSettmp=seedset U {u}
tmpAvailableNodes.removeAll(NeighborOfChurn);
Set<Customer> influencedNet = getNeighbors(tmp, net);
tmpAvailableNodes.retainAll(influencedNet);
return tmpAvailableNodes.size();
}
我在用 ** 指定的程序行中遇到了这个异常。我发现这个错误可能是由迭代器引起的。但是我一个都没用!请帮助我找出导致该异常的原因以及如何解决?
问候。
【问题讨论】:
-
如果另一个线程在迭代集合时尝试更新集合,则会出现此类异常。请检查
标签: java collections concurrentmodification