很难从LinkedList中删除重复的内容



对于链表,我们应该在链表中找到重复项,然而,我所编写的方法似乎只遍历一次,并没有删除所有重复项。知道为什么会这样吗?

public void removeDuplicate(){
   LinkedListIterator iter = new LinkedListIterator();
   while(iter.hasNext()){
       Object j = iter.next();
       LinkedListIterator iter2 = iter;
       while(iter2.hasNext()){
           Object x = iter2.next();
           if(x.equals(j))
               iter2.remove();
       }
   }
   }

当您需要删除重复项时。试着考虑Set接口

,在你的情况下,使用LinkedHashSet来维持秩序。

代码

Set uniqueList = new LinkedHashSet();
uniqueList.addAll(yourList);
System.out.println(uniqueList);

我假设您需要使用迭代器....

您的第一个问题是您创建了一个迭代器,但不是从列表创建的。如果你有一个列表myList,你用myList.iterator()创建一个迭代器。

你的第二个问题是LinkedListIterator iter2 = iter;。你需要另一个不同的迭代器;您的语句使iter2iter都指向同一个底层实例。

LinkedListIterator iter2 = iter;

你只有一个迭代器。此外,这似乎是伪代码,或者您没有使用标准Java库。

用Set代替List的所有建议当然都是有效的,如果这不是一个练习,这将是首选的方法。

这个解决方案更简单

List uniqueList = new LinkedList(new HashSet(list));

您可以使用:

Set<Foo> uniqueFoos = new LinkedHashSet<Foo>(myList);
myList.clear();
myList.addAll(uniqueFoos);

这一行

LinkedListIterator iter2 = iter;

不创建新的迭代器,而是创建对原迭代器的新引用。所以当你调用

iter2.hasNext()

while语句中,它正在推进iter(因为它与iter2相同)。当iter2完成后,iter也完成了。

相关内容

  • 没有找到相关文章

最新更新