在Java中,为什么Stack是一个具体的类而Queue是一个接口?

时间:2011-04-04 02:36:22

标签: stack queue

Queue的哪个子类是'普通普通'队列?

2 个答案:

答案 0 :(得分:5)

(1)java.util.Stack是Java 1.0的遗留类。它早于Collections框架已经很多年了,而且坦率地说它是许多方面的可怕的设计的一个例子。事情应该是这样的。主要问题是Stack扩展Vector,并且由于Java中的所有继承都是公共继承,Vector的所有方法也可以在Stack上使用。因此,您可以检查堆栈中的任何位置,从中间添加和删除元素,清除它,或执行任何不应该成为堆栈抽象的其他内容,没有强制转换。与使用QueueDeque接口进行对比,通过这些接口只能使用适合堆栈的方法。

(2)确实没有普通的普通队列,但LinkedList实现了Queue而没有任何特殊的语义,所以也许这就是你想要的。

答案 1 :(得分:0)

任何具体的子类都可以用作“普通普通”队列。确实,它们可能具有其他功能,但您可以只使用Queue接口中声明的方法。虽然我想你可能想要避免其额外功能影响队列排序(如PriorityQueue),容量等的子类,如果你想要一个“普通”的。(/ p>