如何在java中轻松删除链表中的重复项?
问问题
7133 次
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 回答