我的應用程序中有許多隊列和優先級隊列。我想要輕鬆訪問這些隊列中的第n個項目,但沒有看到使用API的簡單方法。我想我可以創建一個迭代器並迭代到第n個或使用toArray()[index] - 但它似乎應該有一個更簡單的方法。如何獲得Java中隊列中的第n個項目?
我錯過了什麼嗎?
我的應用程序中有許多隊列和優先級隊列。我想要輕鬆訪問這些隊列中的第n個項目,但沒有看到使用API的簡單方法。我想我可以創建一個迭代器並迭代到第n個或使用toArray()[index] - 但它似乎應該有一個更簡單的方法。如何獲得Java中隊列中的第n個項目?
我錯過了什麼嗎?
我錯過了什麼?
是 - 通過索引訪問元素不是隊列概念的一部分。
如果您需要通過索引訪問元素,您需要一個列表,而不是一個qeue。
一個隊列的整個點是隻對頭部(第一個元素)進行訪問。如果您想要對線性數據結構中的元素進行任意訪問,請使用List
(如果您的查詢比push/pop更多,請考慮使用ArrayList
,因爲LinkedList
不針對隨機訪問進行優化)。
'LinkedList'實現'Queue','ArrayList'不會。 – 2012-03-09 22:29:14
@his:我的回答是他不應該使用Queue ADT,因爲它不支持隨機訪問,但他應該使用List(這兩者都實現)。所以我沒有看到相關性。 – 2012-03-10 17:05:43
我在您使用的
Queues
什麼具體的數據類型,我的應用程序
一些隊列和優先級隊列? A LinkedList
?在這種情況下,您應該可以通過轉換回鏈接列表來獲取第n
th元素。
但是,這是不是你將如何使用Queue
而對於優先級隊列,從你的問題看來你還沒有使用正確的數據結構。
優先級隊列將始終返回最小元素(通過排序)。
那麼你在這裏指什麼n
元素?n
最小還是n
插入什麼?所以我們不能說在這種情況下該怎麼做
只需要注意,獲取「LinkedList」的第n個元素相當於將「Queue」迭代到第n個元素。 – 2012-03-09 16:42:59
@MarkPeters:你說得對,但這不是正確使用'Queue',在代碼中看到這一點很尷尬。所以最好使用例如。作爲'LinkedList'直接,因爲它反映了你正在嘗試做的更好 – Cratylus 2012-03-09 16:44:50
@user:我會同意只是使用'List'更好,但迭代在'Queue'在我腦海中比* cast *更好一個'LinkedList'因爲它將你自己連接到一個實現細節。如果OP有能力改變提供'Queue'的代碼,我完全同意。 – 2012-03-09 16:52:48
隊列不允許按概念進行隨機索引訪問,因此接口不允許這樣做。如果您同時需要兩種訪問方式(這是設計的錯誤標誌),那麼您可以使用實現List
和Queue
(例如LinkedList
)的數據類型。
使用ArrayList作爲堆棧。當您需要特定物品時,您可以使用get(x)。 – 2012-03-09 16:37:11
這不符合排隊的想法嗎?隊列應該是FIFO結構,而不是象地圖或數組那樣的按需訪問。你是否有理由使用Queue而不是List? – dardo 2012-03-09 16:38:12
'Queue'接口不向直接元素訪問元素,只顯示在前面,並通過迭代器訪問。爲了您的使用,您可能需要一個基於List的集合。 – birryree 2012-03-09 16:38:40