【发布时间】:2020-05-21 19:59:46
【问题描述】:
我正在尝试实现唯一堆栈。如果我尝试扩展堆栈类并使用包含,它将查看整个堆栈,时间复杂度将变为 O(n)。所以我尝试扩展 LinkedHashSet,它会自行删除重复项并保持顺序。我能够实现除pop之外的所有方法。
有人可以在这里分享想法吗?
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Stack;
import java.util.stream.Stream;
public class UniqueStack<E> extends LinkedHashSet<E>{
private int size = 0;
@Override
public Stream<E> stream() {
return super.stream();
}
public boolean push(E e) {
if (!contains(e)) {
++size;
return super.add(e);
}
return false;
}
public E pop() {
// struck here
return;
}
}
【问题讨论】:
-
为什么不同时使用
Stack和HashSet作为UniqueStack的一部分?此外,Stack应替换为ArrayDeque。 -
@JacobG。如果我使用堆栈和 HashSet。我必须在堆栈和哈希集中存储相同的数据。我将结束,维护相同的数据。它会消耗更多的内存
-
内存真的是个问题吗?您最多会存储多少个元素?
-
我需要抓取一个网站。其中有数百万个网址。我将使用 DFS。所以我需要堆栈。
-
无论您使用 Stack/HashSet 组合还是 LinkedHashSet,所需的内存量都是相同的,只要您存储对象即可。如果你想要 O(1) 的性能,你需要一个集合,如果你想要一个堆栈,你需要一个堆栈或链表。 LinkedHashSet 通过将对自身的引用存储为哈希集和链表的一部分来组合两者。
标签: java stack hashset linkedhashset