2012-03-29 31 views
1

我在做一个顶部排队。我使用数组还是数组列表?如果我正在制作一个固定大小的队列,是阵列还是阵列列表?

+1

为什么不直接使用[ArrayDeque(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayDeque.html)? – 2012-03-29 23:13:32

+1

如果它是一个队列,为什么不使用队列?! – assylias 2012-03-29 23:15:31

+0

@TedHopp,ArrayDeque调整自己以保存任意数量的元素。这个问题是关于一个固定大小的队列。虽然ArrayDeque周围的包装器强制执行大小限制,但这可能是值得的。 – Wyzard 2012-03-29 23:19:30

回答

1

我不知道你所说的“上下”队列的意思,而且也不谷歌,但在一般的数组是不是一个队列一个不错的选择。在队列中,您插入前面并从后面移除(FIFO)。在一个数组中,插入到数组的前面需要将现有数组中的所有元素复制到正确的数组中,这需要O(n)个时间。如果你在队列中只有一些物品,那不是什么问题,但是如果你有很多物品,那显然是很浪费的。

头和尾指针双向链表会更好,但你应该只使用一个Queue代替。

0

取决于你如何去填充它:

如果你要填满它以随机顺序,你可能是一个数组更好,否则我会从ArrayList中或列表去避免所有的“REDIM” S。

1

如果你上面所说的它是固定的,即它总是将有多达10分的东西,我会使用一个数组,因为数组是固定的,他们更容易操作。 ArrayList可以增长,但是它的API比数组小很多。

1

我会用ArrayList,因为它有效地与一个更好的API的数组。使用带有initialCapacity参数的构造函数,使其先行分配适量内存,并且不要调用任何会导致其自身大小调整的方法。

0

您可以使用LinkedBlockingQueueArrayBlockingQueue,它可以是有界的(固定大小)。数组可能是一个解决方案,但您需要重新实现队列逻辑。列表不受限制,因此除非添加一些代码,否则没有任何东西阻止您将它们变得比预期的更大。队列为你做了这一切。

0

我不会使用数组或ArrayList。我会用LinkedList。你需要在后面插入并从前面移除,这些操作在数组上是O(n),而在链表上则是O(1)。

相关问题