关于为什么不使用Stack实现栈

105 阅读1分钟

我们知道栈和队列都是动态集合,且在其上进行的DELETE操作所移除的元素都是预先设定的。

在栈stack中,被删除的是最近插入的元素:实现的是一种后进先出,只能在一端进行删除或插入的策略

而在队列queue中,被删去的总是在集合中存在时间最长的那个元素,实现的是先进先出

在以前的版本实现栈都是采用的stack类,但也正因 Stack 做成了一个类,继承了 Vector,也就只能基于 Vector 这一种固定的数据结构了。Vector作为一个动态数组,他可以在数组中的任何位置添加或删除元素,因此一旦stack继承了Vector,就意味着破坏了栈的数据结构。 所以实现栈时,我们几乎都会使用官方推荐的Deque接口:

Deque stack = new ArrayDeque<>();

这样就总够了吗?

Deque接口是双端队列,可以在线性数据结构的两端,进行插入和删除操作。而这也破坏了栈的数据结构。但目前好像还没找到其他方法,因此我们可以自己再封装一层,做一个限制,限制它只能从一端插入删除的真正的栈。

学到这,有些不理解。为什么官方要把stack做成一个类,而queue却做成接口。