2011-12-02 26 views
0

在我的cardgame-project中,我模擬了一個帶有堆疊的卡片。堆/堆棧中的每張卡都有唯一的標識符。如何從堆棧中獲取特殊ID的對象?

現在我想把具有特定標識符的對象帶出堆棧。 有沒有一種有效的方法來實現它?首先,我想到了一個迭代器,它將迭代堆棧......但如果堆棧中有很多卡,它不是一個最佳解決方案。

+0

堆棧真的是一個正確的選擇嗎?還是你需要使用它? – DrColossos

+1

我覺得有一點混亂,在這裏...在遊戲中的卡被稱爲「卡堆」,但不應該由一個堆棧數據結構來表示。這幾乎就像一個可以用鏈表表示的「銀行隊列」,以便使迭代成爲可能(衡量每個客戶的煩惱程度:-)) –

回答

0

您可能還會保留一個Map<Key, Card>以通過其唯一ID跟蹤卡(Key可能是String,Integer等)。然後,您可以撥打remove(Object),其中Stack繼承自Vector,傳遞您想要移除的Card

這是假設你被限制在Stack數據結構,你可能不是(見其他答案)。

0

那麼,這就是堆棧的工作原理。爲了獲得堆疊中的頂級物品以外的其他物品,您必須彈出所有物品並將它們推入另一個堆棧,直到找到物品。然後你必須彈出另一個堆棧中的所有項目並將它們推回到原始堆棧。

這就是你要做的,如果你也在手動尋找一張卡。

0

堆棧是後進先出法,你必須跳出項目,直到你找到one.Then推彈出項目back.You應該使用類似的地圖,以獲得ID的項目更容易需要。

1

您可能會將「堆疊卡」稱爲堆棧,但不應將其與堆棧數據結構混淆。我會建議爲你的卡對象兩個數據結構在你的遊戲:

  1. 列表,以保持某種形式的排序(所以你知道在哪個訂購卡)。 ArrayList在這裏可以很好地工作。

  2. 一個HashHap快速檢索(記住,一個地圖通常失去了它的順序)。

一樣卡將同時存在於數據結構,你不會使用更多的內存,但有兩個數據結構的優點(快速查找和排序)。你必須處理一些家務管理,但這是可以預料的。