2012-03-29 47 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)。

相關問題