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

Yan*_*ang 17 java queue stack

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

Tik*_*vis 7

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

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

另外,关于你的第二个问题,你可能应该使用堆栈或队列,这是你在语义上使用的.也就是说,如果您正在执行类似图遍历的操作,则有助于明确您正在使用的数据结构类型.


Mar*_*iot 6

Stack,是一个前后进先出的对象堆栈Vector,也是一个类.Vector与Java最初附带的"旧"集合一起使用,并最终源自AbstractCollection.值得注意的是,实际上有一个规范的实现Stack; Queues和Lists有许多众所周知的实现,如果正确选择可以产生显着的性能差异.

Queue另一方面Collection,它遵循今天通常使用的"新"集合的接口,因此它遵循接口并具有各种实现.

Stack当你需要LIFO语义时Queue应该使用s ,而当你需要先进先出语义时应该使用s.

ArrayListLinkedList存储有序的事物集合,并且不与用例StackQueue直接对齐.Stacks和Queues在某种意义上是数据的缓冲区,而a的语义List通常使得它是一个数据存储区; 没有什么能阻止你使用a List来实现a Stack或a Queue.