【发布时间】:2011-04-04 02:36:22
【问题描述】:
Queue 的哪个子类是“普通”队列?
【问题讨论】:
Queue 的哪个子类是“普通”队列?
【问题讨论】:
(1) java.util.Stack 是 Java 1.0 的遗留类。它比 Collections 框架早了很多年,坦率地说,它是许多方面可怕设计的一个例子。没有什么是事情应该是这样的。主要问题是Stack扩展了Vector,并且由于Java中的所有继承都是公共继承,Vector的所有方法在Stack上也可用。因此,您可以检查堆栈中的任何位置,从中间添加和删除元素,清除它,或执行任何数量的其他不应该是堆栈抽象的一部分的事情,没有强制转换。与使用Queue 或Deque 接口相比,只有适合堆栈的方法可用。
(2) 确实没有普通的队列这种东西,但是 LinkedList 实现了 Queue 没有任何特殊的语义,所以也许这就是你想要的。
【讨论】:
java.util.Stack 是一个可怕的设计吗? ...尤其是在为什么 java.util.Queue 设计良好的背景下?
它的任何具体子类都可以用作“普通”队列。诚然,它们可能具有附加功能,但您可以只使用在Queue 接口中声明的方法。虽然我想如果你想要一个“普通”的子类,你可能想要避免额外功能影响队列排序(如PriorityQueue)、容量等的子类。
【讨论】: