为什么Stack是一个类,而Queue是一个接口?

时间:2011-07-16 01:00:03

标签: java stack queue

我认为它们非常相似......我们何时需要使用堆栈或队列,为什么不使用ArrayList或LinkedList来替换它们呢?

2 个答案:

答案 0 :(得分:7)

嗯,有一个原因是有一些队列的变体,它们很容易交换,比如PriorityQueues。它们实现相同的界面但行为不同。我不认为Stacks有类似的东西,或者至少它没有经常使用。

您将无法仅使用ArrayList来模拟优先级队列。

此外,关于你的第二个问题,当你正在使用语义时,你应该使用堆栈或队列。也就是说,如果您正在执行类似图遍历的操作,那么有必要对您正在使用的数据结构类型进行非常明确。

答案 1 :(得分:6)

Stack,是从Vector派生的后进先出堆栈对象,也是一个类。 Vector与Java最初附带的“旧”集合一起使用,并最终从AbstractCollection派生。值得注意的是,Stack实际上只有一个规范的实现; QueueList许多众所周知的实现,如果选择正确,可能会产生重大的性能差异。

另一方面,

Queue遵循今天通常使用的“新”集合集合中的Collection接口,因此它遵循接口并具有各种实现。

当您需要LIFO语义时,应使用

Stack,而当您需要先进先出语义时,应使用Queue

ArrayListLinkedList存储已订购的内容集合,并且不与StackQueue的用例对齐直。 StackQueue在某种意义上是数据的缓冲区,而List的语义通常使得它是一个数据存储区;没有什么能阻止您使用List来实施StackQueue