Java集合:将集合中的元素相互比较,并在一个循环中删除

时间:2010-07-13 09:07:28

标签: java collections

说,我有一些地理位置的集合(格式为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

3 个答案:

答案 0 :(得分:3)

你确定你想在内循环中增加你的outerIterator吗?

答案 1 :(得分:2)

如果从外部迭代器中删除一个对象,则需要在之后立即中断内部循环。我不确定这是否能完全解决你的问题,但它可能会让你更进一步。

如果仍有问题,请显示错误消息和/或异常!

答案 2 :(得分:2)

我认为您应该选择为您的区域使用不同的结构,例如每个位置都包含子级的树。这样,您可以在简单查找后排除与另一个重叠的所有区域。不需要嵌套迭代。

如果没有位置可以与两个位置重叠,这会更容易,这似乎就是这种情况。