说,我有一些地理位置的集合(格式为Country > Region [ > Town [ > District]]
),我想删除彼此重叠的位置(例如,Europe > Germany
重叠Europe > Germany > Dresden
和{{1所以最后两个必须删除)。我看到我需要两个迭代器实例来制作这样的东西:
Europe > Germany > Hamburg
但是我不能为同一个集合获得新的final Iterator<Location> outerIterator = locations.newIterator();
while (outerIterator.hasNext()) {
final Location outer = outerIterator.next();
final Iterator<Location> innerIterator = locations.newIterator();
while (innerIterator.hasNext()) {
final Location inner = innerIterator.next();
if (!inner.equals(outer)) {
if (inner.overlaps(outer)) outerIterator.remove();
else if (outer.overlaps(inner)) innerIterator.remove();
}
}
}
。我的算法是不正确的还是有办法做对吗?
使用answer provided Carl Smotricz的建议的最终代码如下所示:
Iterator
答案 0 :(得分:3)
你确定你想在内循环中增加你的outerIterator吗?
答案 1 :(得分:2)
如果从外部迭代器中删除一个对象,则需要在之后立即中断内部循环。我不确定这是否能完全解决你的问题,但它可能会让你更进一步。
如果仍有问题,请显示错误消息和/或异常!
答案 2 :(得分:2)
我认为您应该选择为您的区域使用不同的结构,例如每个位置都包含子级的树。这样,您可以在简单查找后排除与另一个重叠的所有区域。不需要嵌套迭代。
如果没有位置可以与两个位置重叠,这会更容易,这似乎就是这种情况。