我认为它们非常相似......我们何时需要使用堆栈或队列,为什么不使用ArrayList或LinkedList来替换它们呢?
答案 0 :(得分:7)
嗯,有一个原因是有一些队列的变体,它们很容易交换,比如PriorityQueues。它们实现相同的界面但行为不同。我不认为Stacks有类似的东西,或者至少它没有经常使用。
您将无法仅使用ArrayList来模拟优先级队列。
此外,关于你的第二个问题,当你正在使用语义时,你应该使用堆栈或队列。也就是说,如果您正在执行类似图遍历的操作,那么有必要对您正在使用的数据结构类型进行非常明确。
答案 1 :(得分:6)
Stack
,是从Vector
派生的后进先出堆栈对象,也是一个类。 Vector
与Java最初附带的“旧”集合一起使用,并最终从AbstractCollection
派生。值得注意的是,Stack
实际上只有一个规范的实现; Queue
和List
有许多众所周知的实现,如果选择正确,可能会产生重大的性能差异。
Queue
遵循今天通常使用的“新”集合集合中的Collection
接口,因此它遵循接口并具有各种实现。
Stack
,而当您需要先进先出语义时,应使用Queue
。
ArrayList
和LinkedList
存储已订购的内容集合,并且不与Stack
或Queue
的用例对齐直。 Stack
和Queue
在某种意义上是数据的缓冲区,而List
的语义通常使得它是一个数据存储区;没有什么能阻止您使用List
来实施Stack
或Queue
。