Java中带迭代器的UnsupportedOperationException
在我的模型中,我有不同的场景,在每个场景中,道路网络(图)的某些路段(边缘)降级(丧失通行能力)或中断(由于总损坏而移除)。出于这个原因,我正试图迭代每个场景的一组边,从原始网络开始,并通过更改一些边的容量和删除一些其他边来更新网络。开始时,我没有使用迭代器对边进行迭代,这导致了“ConcurrentModificationException”。然后我修改了代码以便使用迭代器,但这次它不允许我在迭代器(edgeIt.remove())中使用remove方法。我如何解决这个问题?提前谢谢你的帮助Java中带迭代器的UnsupportedOperationException,java,Java,在我的模型中,我有不同的场景,在每个场景中,道路网络(图)的某些路段(边缘)降级(丧失通行能力)或中断(由于总损坏而移除)。出于这个原因,我正试图迭代每个场景的一组边,从原始网络开始,并通过更改一些边的容量和删除一些其他边来更新网络。开始时,我没有使用迭代器对边进行迭代,这导致了“ConcurrentModificationException”。然后我修改了代码以便使用迭代器,但这次它不允许我在迭代器(edgeIt.remove())中使用remove方法。我如何解决这个问题?提前谢谢你的帮助
ArrayList FWS=new ArrayList();
对于(int w=0;w最有可能的是edgeSet()
返回的集合不支持remove()
操作,或者它确实支持remove()
,但它的迭代器却不支持
为了解决这个问题(以及ConcurrentModificationException
),您必须在一个单独的集合中收集要删除的边,在完成迭代后,通过图形的适当API删除它们。很可能是edgeSet()返回的集合
)
根本不支持remove()
操作,或者它确实支持remove()
,但它的迭代器却不支持
为了解决这个问题(以及ConcurrentModificationException
),您必须在一个单独的集合中收集要删除的边,在完成迭代后,通过图形的适当API删除它们。很可能是edgeSet()返回的集合
)
根本不支持remove()
操作,或者它确实支持remove()
,但它的迭代器却不支持
为了解决这个问题(以及ConcurrentModificationException
),您必须在一个单独的集合中收集要删除的边,在完成迭代后,通过图形的适当API删除它们。很可能是edgeSet()返回的集合
)
根本不支持remove()
操作,或者它确实支持remove()
,但它的迭代器却不支持
为了解决这个问题(以及ConcurrentModificationException
),您必须在一个单独的集中收集要删除的边,在完成迭代后,通过图形的适当API删除它们。好的,我在谷歌上搜索了一下,显然您正在使用JGraphT库。(Protip:这有助于在你的问题中明确这一点!)报告说:
返回此图中包含的一组边。该集已备份
通过图形,因此对图形的更改将反映在集合中
当对集合进行迭代时,图形被修改
迭代的结果未定义
现在,这只是意味着如果图形的边发生了变化,那么这些变化可以在返回的集合中看到。不幸的是,它没有说明返回的集合中的变化会导致图形的边发生变化。看到您得到了不支持操作异常
,我假设图形
不允许您更改返回的集
。确认此假设:
/**
* @see Graph#edgeSet()
*/
public Set<E> edgeSet()
{
if (unmodifiableEdgeSet == null) {
unmodifiableEdgeSet = Collections.unmodifiableSet(edgeMap.keySet());
}
return unmodifiableEdgeSet;
}
好的,我在谷歌上搜索了一下,很明显你正在使用JGraphT库。(Protip:这有助于在你的问题中明确这一点!)上面说:
返回此图中包含的一组边。该集已备份
通过图形,因此对图形的更改将反映在集合中
当对集合进行迭代时,图形被修改
迭代的结果未定义
现在,这只是意味着如果图形的边发生了变化,那么这些变化可以在返回的集合中看到。不幸的是,它没有说明返回的集合中的变化会导致图形的边发生变化。看到您得到了不支持操作异常
,我假设图形
不允许您更改返回的集
。确认此假设:
/**
* @see Graph#edgeSet()
*/
public Set<E> edgeSet()
{
if (unmodifiableEdgeSet == null) {
unmodifiableEdgeSet = Collections.unmodifiableSet(edgeMap.keySet());
}
return unmodifiableEdgeSet;
}
好的,我在谷歌上搜索了一下,很明显你正在使用JGraphT库。(Protip:这有助于在你的问题中明确这一点!)上面说:
返回此图中包含的一组边。该集已备份
通过图形,因此对图形的更改将反映在集合中
当对集合进行迭代时,图形被修改
迭代的结果未定义
现在,这只是意味着如果图形的边发生了变化,那么这些变化可以在返回的集合中看到。不幸的是,它没有说明返回的集合中的变化会导致图形的边发生变化。看到您得到了不支持操作异常
,我假设图形
不允许您更改返回的集
。确认此假设:
/**
* @see Graph#edgeSet()
*/
public Set<E> edgeSet()
{
if (unmodifiableEdgeSet == null) {
unmodifiableEdgeSet = Collections.unmodifiableSet(edgeMap.keySet());
}
return unmodifiableEdgeSet;
}
好的,我在谷歌上搜索了一下,很明显你正在使用JGraphT库。(Protip:这有助于在你的问题中明确这一点!)上面说:
返回此图中包含的一组边。该集已备份
通过图形,因此对图形的更改将反映在集合中
当对集合进行迭代时,图形被修改
迭代的结果未定义
现在,这仅仅意味着如果图形的边发生了变化,那么这些变化可以在返回的集合中看到