阵列,堆栈和队列之间的性能差异

时间:2015-04-25 21:46:33

标签: java arrays stack queue

数组,堆栈和队列的搜索性能是什么?

我认为数组是最快和最直接的,因为我可以通过使用索引调用它来立即访问任何元素。它是否正确?堆栈和队列的性能如何?他们如何比较?

6 个答案:

答案 0 :(得分:2)

数组(以及基于数组的集合,例如ArrayList)对搜索性能不利,因为在最坏的情况下,您最终会比较每个项目(O(n))。 但是如果您不介意修改元素的顺序,可以对数组进行排序(Arrays.sort(yourArray)),然后对其使用Arrays.binarySearch(yourArray, element),这会提供O(log n)性能配置文件(更好的是O(n))。

堆栈位于O(n),所以没有。

队列甚至不打算迭代,因此在这里寻找一个对象意味着消耗整个队列,即1.不具有性能(O(n))和2.可能不是你想要的。 / p>

因此,在您建议的数据结构中,我会选择一个排序数组。

现在,如果你不介意考虑其他数据结构,你真的应该看看那些使用哈希函数的人(HashSetHashMap ...)。 散列函数非常擅长搜索元素,其中包含O(1)中的性能配置文件(对象中有一个很好的hashcode()方法)。

答案 1 :(得分:2)

我会尝试以一种非常简单的方式回答。

堆栈和队列用于临时存储数据,以便您可以逐个处理内容。就像购买电影票的队列或一堆煎饼一样,你可以一次处理一个元素。

数组用于存储数据以及从开头,结尾或之间访问元素。对于搜索,数组将是更好的选择。

你能搜索堆栈和队列中的元素吗?有可能。但这并不是他们的用途。

答案 2 :(得分:1)

这取决于您的搜索(或搜索算法)的实现方式。 StackQueue也可能对某些搜索应用很有帮助,例如 - BFSDFS。但在正常情况下,当您使用线性搜索时,您可以考虑关于数组或ArrayList

答案 3 :(得分:1)

在Java中,您有ArrayList(基于数组构建),Stack(基于数组构建)和ArrayQueue以及ArrayDeque(也构建在数组上)As它们都使用相同的底层数据结构,它们的访问速度基本相同。

对于强力搜索,扫描或迭代它们的时间(所有这些都支持迭代)是O(n)顺便说一句,即使HashMap使用数组来存储它的条目,这就是为什么迭代它的要找到一个值的元素,例如containsValue也是O(n)。

虽然你可以拥有一个更自然地位于ArrayList中的排序数组,但你可以同样认为PriorityQueue会最有效地找到并删除下一个元素。 Stack非常适合查找最近添加的元素。

要回答这个问题,你必须确定问题提出者的假设。没有这些进一步的假设,你不得不说它们都可以被利用。在这种情况下,我会使用ArrayList,因为它是最容易理解的恕我直言。

答案 4 :(得分:1)

堆栈,队列和数组都是三种不同且高效的数据结构,但作为生物信息学家,如果您要存储生物数据,则应选择堆栈作为数据结构,因为递归过程的后进先出特性表明它是最适合的数据结构。递归实际上是堆栈的特征。在每个过程调用中,可以轻松地将值推入其中,并且在您退出过程时可以将其检索。因此,使用方法实际上是一件容易事。

答案 5 :(得分:0)

看到您无法将一种数据结构与另一种数据结构进行比较。每个人都有自己的优点和缺点。

虽然数组是好的,但是由于它们的固定大小,您不能一直使用它们。它们用于插入,删除等操作,因为它们需要O(1)时间。

但是,当您只想从一种方式访问​​和插入数据而又不想执行搜索时,则在这两者之间删除就可以进行堆栈和排队。堆栈和队列仅在访问元素的方法上有所不同。在堆栈中,您从同一侧访问数据,然后输入数据[LIFO]需要O(1)时间。在队列中,您可以从其他角落[FIFO]访问数据。可以访问介于两者之间的元素,但这不是它们的用途。