【问题标题】:Trouble removing duplicates from a LinkedList无法从 LinkedList 中删除重复项
【发布时间】:2011-11-17 17:01:21
【问题描述】:

对于链表,我们应该在链表中找到重复项,但是,我编写的方法似乎只执行一次,并没有删除所有重复项。知道为什么要这样做吗?

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();
       }
   }

   }

【问题讨论】:

  • 你不应该标记这个作业吗?
  • 首先你的迭代器 iter 没有什么可以迭代的。其次iter2是复制第一个的时候需要独立的。

标签: java iterator linked-list


【解决方案1】:

当您需要删除重复项时。 想想Set接口

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

这里是代码

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      LinkedListIterator iter2 = iter;

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

      所有关于 Set 而不是 List 的建议当然是有效的,如果这不是练习的话,这将是首选方式。

      【讨论】:

        【解决方案4】:

        这个解决方案更简单

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

        【讨论】:

        • 你像这样失去了顺序并且会收到警告,因为你没有指定泛型类型参数。
        【解决方案5】:

        你可以使用:

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

        【讨论】:

          【解决方案6】:

          这一行

          LinkedListIterator iter2 = iter;
          

          不会创建新的迭代器,而是创建对原始迭代器的新引用。所以当你打电话时

          iter2.hasNext()
          

          在您的while 语句中,它正在推进iter(因为它与iter2 相同)。因此,当 iter2 完成时,iter 也完成了。它们是一样的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-23
            • 2018-12-04
            • 1970-01-01
            • 2021-08-28
            • 2012-01-01
            • 2020-05-11
            相关资源
            最近更新 更多