0

如何在java中轻松删除链表中的重复项?

4

6 回答 6

16

请改用LinkedHashSet,这样一开始就不会出现重复项。

于 2009-05-29T15:55:12.500 回答
9

我不知道您的要求是否是使用链接列表,但如果不是,请使用 Set 而不是 List(您将问题标记为“最佳实践”)

于 2009-05-29T15:55:40.410 回答
3

容易在什么方面?如果它是一个相当短的列表,最简单的解决方案是将其转储到一个 Set 中,然后返回到一个 List 中。

myList = new LinkedList<Whatever>(new HashSet<Whatever>(myList));

但是为什么要为此烦恼呢?如果你不想重复,你应该使用Set; 如果您只想要一个列表,以便您可以将元素保持在它们插入时的相同顺序,您可以使用 aLinkedHashSet来获得两全其美: aSet像 a 一样可预测地迭代LinkedList

于 2009-05-29T15:55:11.283 回答
2

搜索它们,如果两个代表相同的东西,删除其中一个。

你还想要什么?您需要有关如何快速执行此操作的建议吗?如果是这种情况,请将节点存储在哈希表中,以便在查找重复项时轻松匹配。

于 2009-05-29T15:56:15.400 回答
1
import java.util.*;
import java.lang.*;

class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        Collection<String> c = new LinkedList<String>();
        c.add("JAR");c.add("BDK");c.add("JDK");c.add("JAR");c.add("WAR");c.add("APK");c.add("BDK");
        c=new HashSet(c);
        c=new ArrayList(c);
        for(String s : c)
        {
            System.out.println(s);
        }
    }
}
于 2012-03-19T06:22:44.783 回答
0

你可以使用distinct()Stream的方法。该distinct()方法基于 Stream 工作并返回仅包含唯一元素的流。此方法在内部调用该equals()方法。

duplicateElements.stream().distinct().collect(Collectors.toList());
于 2021-10-21T13:09:37.060 回答