【发布时间】:2012-04-02 03:21:20
【问题描述】:
我正在尝试编写一个非常简单的方法来删除 LinkedList 中的重复项:
我尝试在不使用额外缓冲区的情况下执行此操作,因此我在链表上维护了两个迭代器,一个进行正常迭代,另一个迭代所有先前的节点以检查是否存在欺骗(如 CareerCup 中所示);然而,编译器告诉我有一个 CME,即使我正在调用 itr1.remove():
public static void RemoveWithoutBuffer(LinkedList l) {
ListIterator itr1 = l.listIterator();
int count1 = 0;
int count2 = 0;
while (itr1.hasNext()) {
Object next = itr1.next();
count1++;
count2 = 0;
ListIterator itr2 = l.listIterator();
while (itr2.hasNext()) {
count2++;
if (count2 == count1)
break;
if (itr2.next() == next){
itr1.remove();
}
}
}
}
借助 hashset 的另一个更简单的解决方案如下,并且没有报告异常:
public static void Remove(LinkedList l) {
HashSet set = new HashSet();
ListIterator itr = l.listIterator();
while (itr.hasNext()) {
Object next = itr.next();
if (set.contains(next))
itr.remove();
else
set.add(next);
}
}
是不是因为当我迭代 itr2 时,我无法在 itr1 上进行修改?有没有办法解决这个问题?谢谢各位。
【问题讨论】:
标签: java iterator linked-list