Java 从单链表中删除重复项
有没有一种方法可以这样修改链表,这样我们就可以从链表中删除所有重复项 我们的想法是,它需要线性时间和恒定的内存使用。我试图将列表中的所有元素放入Java 从单链表中删除重复项,java,algorithm,Java,Algorithm,有没有一种方法可以这样修改链表,这样我们就可以从链表中删除所有重复项 我们的想法是,它需要线性时间和恒定的内存使用。我试图将列表中的所有元素放入HashMap中,这给了我们恒定的时间但线性的内存使用 还有其他方法吗?您可以使用stream().distinct()方法来执行线性时间: List<String> result = list.stream() .distinct() .collect(Collectors.toList()); List
HashMap
中,这给了我们恒定的时间但线性的内存使用
还有其他方法吗?您可以使用stream().distinct()
方法来执行线性时间:
List<String> result = list.stream()
.distinct()
.collect(Collectors.toList());
List result=List.stream()
.distinct()
.collect(Collectors.toList());
从算法上讲,这听起来是不可能的(或者这里有人会让我大吃一惊)
但是,您可以创建一个没有重复项的列表模拟,而不需要这样做任何算法:
public class SimulatedNoDuplicatesList extends LinkedList {
private List originalList;
SimulatedNoDuplicatesList(List original) {
originalList = original;
}
// override all the methods that you want to use with the old list. for example
// @Override
public Object get(int i) {
if (!super.contains(i) && originalList.contains(i)) {
super.add(originalList.get(i));
}
return super.get(i);
}
}
这是不可能的。线性内存使用有什么问题?如果您想要恒定的内存使用率,则需要n^2个操作来删除重复项。这远远不是恒定的内存使用率。它甚至不修改列表。它创建了另一个。是的,它可以在线性时间内完成。这就是你的代码所做的。@JBNizet我的错误。感谢您的更正。或者只需
Set noDups=newlinkedhashset(listWithDups)代码>