堆栈已使用Java中的可调整大小的数组(矢量)实现。但是,据我了解,尽管您可以选择,但是通常使用LinkedList实例化队列以用于常见应用程序。
我知道理论上他们支持O(1)最坏情况或分期偿还的所有操作。但是,是否有特定原因导致可调整大小的数组更适合堆栈,而链表更适合队列?
换句话说,为什么他们都不使用可调整大小的数组或链接列表?
答案 0 :(得分:5)
我知道理论上他们支持O(1)最坏情况或分期偿还的所有操作。
您似乎误会了,因为Stack#search
是O(n)
操作。
...而链表更适合排队吗?
如LinkedList
的{{3}}所述,Queue
用作ArrayDeque
时不太可能是最佳的:
[ArrayDeque]用作堆栈时,可能比Stack快,而用作队列时,则比LinkedList快。
换句话说,为什么他们都不使用可调整大小的数组或链接列表?
由于Stack
是过时的类,因此不应该使用,如其documentation所指定:
Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先使用此类。
答案 1 :(得分:2)
之所以这样称呼堆栈,是因为它们“堆栈”。一个对象位于另一个对象之上。这些堆叠对象的迭代需要很胖,通常是为了快速读写堆栈而设计的。 ArrayList(或可调整大小的数组)使用单个动态数组来存储数据。向阵列添加新内容并不是最快的事情,但是由于它是单个阵列,因此读写速度更好。
队列只是简单地一个接一个地排队的数据字符串。无论如何,队列通常会不断增长。想想音乐队列,歌曲被多次添加。但是,音乐的读取是非常基本的,因此读取和写入不需要花费太多时间。链表使用双链表进行操作,这样可以加快添加/删除时间,但降低读写速度。
希望这可以回答您的问题。 干杯!