有没有办法以这种方式修改链表,以便从中删除所有重复项。
需要考虑线性时间和恒定内存使用情况。我试图将列表的所有元素放入HashMap
,这给了我们恒定的时间,但线性内存使用。
还有其他办法吗?
答案 0 :(得分:1)
您可以使用stream().distinct()
方法进行线性时间:
List<String> result = list.stream()
.distinct()
.collect(Collectors.toList());
答案 1 :(得分:0)
在算法上听起来不可能(或者有人会让我感到惊讶)。
但你可以创建一个没有重复的列表的模拟,而不用那样做任何算法:
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);
}
}