說,我收集了一些地理位置(格式爲Country > Region [ > Town [ > District]]
),我想刪除彼此重疊的位置(例如,Europe > Germany
重疊Europe > Germany > Dresden
和Europe > Germany > Hamburg
,所以最後兩個必須刪除)。我知道我需要迭代器的兩個實例,使這樣的事情:Java集合:將集合中的元素彼此進行比較並在一個週期內將其刪除
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();
}
}
}
但我不能爲同一個集合獲得新Iterator
。我的算法是不正確的還是有辦法做到這一點?
通過Carl Smotricz使用從answer provided的建議最終代碼如下所示:
final Iterator<JobLocation> outerIterator = locations.iterator();
while (outerIterator.hasNext()) {
final JobLocation outer = outerIterator.next();
final Iterator<JobLocation> innerIterator = locations.iterator();
while (innerIterator.hasNext()) {
final JobLocation inner = innerIterator.next();
if (!inner.equals(outer) && inner.overlaps(outer)) {
outerIterator.remove();
break;
}
}
}
你應該爲此考慮一個更好的數據結構,或許像樹一樣分層。它會讓你的生活更輕鬆。事情會更易於管理,可讀性更強,速度更快等。 – polygenelubricants 2010-07-13 10:25:27
這個代碼是針對GWT的問題,它已經有點複雜了。事實上,層次樹保存在服務器端,我剛剛通過RPC獲得了客戶端的實例。 – 2010-07-13 11:46:18