最近我正在研究Stack, Bag, and Queue
。
我正在读课时给我留下一个问题。
Array
和Linked
之间有什么区别?
为什么我们不能只使用Stack
?
Stack<String> stack = new Stack<String>()
Stack<String> stack = new ArrayStack<String>()
这两个我认为他们做同样的事情,他们可以偷看,弹出和删除
我不知道为什么我们需要实现数组或链接
答案 0 :(得分:1)
根据您要执行的操作,使用任何数据结构。每种不同的数据结构对于不同的场景具有不同的性能。有关更多信息,请在维基百科上阅读更多相关信息
答案 1 :(得分:1)
无论实施如何,操作和功能都是相同的。您可以选择使用数组或链接类型来提高性能。
此处详细回答了效果详情:Array-Based vs List-Based Stacks and Queues
答案 2 :(得分:0)
LinkedStack存储在链接的节点中。它代表后进先出(LIFO)。它支持通常的推送和 pop 操作,以及查看顶部项目的方法,测试堆栈是否为空,并以LIFO顺序迭代项目。
ArrayStack表示堆栈的数组实现。它是iStack的数组实现基础。其生长因子为2,起始大小为150。
Stack它通过五个操作扩展了Vector类,允许将一个向量视为一个堆栈。提供了常用的push和pop操作,以及一个查看堆栈顶部项目的方法,测试堆栈是否为空的方法,以及在堆栈中搜索项目并发现距离顶部有多远的方法。
答案 3 :(得分:0)
Stack
是Java JDK的一部分(参见JavaDoc)。 ArrayStack
和LinkedStack
不是标准JDK的一部分。仅依靠名称,它们将由数组或链接列表支持,而不是基于Vector
。
答案 4 :(得分:0)
基本上,这与性能有关。 “堆栈”只是一个接口 - 它是通过一些命令获取数据以进行查看和修改的一种方式。但是,这说明了 数据是如何存储在结构中的 - 这就是ArrayStack
和LinkedStack
等内容变得重要的地方。
基本上,这些堆栈中的每一个都由一些更原始的结构“支持” - 这是实际存储我们放入其中的数据的幕后故事。在ArrayStack
的情况下,这是一个数组 - 在LinkedStack
的情况下,这是一个链表。
那有什么区别?好吧,考虑阵列。数组必须使用连续的内存 - 也就是说,整个数组必须在内存中给出一个块,这是一个长的不间断块。另一方面,链表由指针链接的各个节点组成 - 并不要求它是连续的。这使得调整数组的大小成为问题 - 基本上,我们必须创建一个新数组,并将所有内容复制到其中以调整其大小。这可能是堆栈的问题,因为我们通常不知道堆栈的大小。链接列表没有这个问题 - 我们只是创建一个新节点并将其链接到之前的列表。
因此,总体而言,差异在于内存使用和性能 - 尝试实现这两者并计算它们如何与 big 数据配合使用以查看差异。