在我的cardgame项目中,我模拟了一个堆叠的卡片。堆/堆的每张卡具有唯一的标识符。
现在我想将具有特定标识符的对象从堆栈中取出。 是否有一个有效的选择来实现它?首先,我想到了一个迭代器,它将迭代堆栈...但如果堆栈中有很多卡,它不是最佳解决方案。
答案 0 :(得分:1)
您可以将“堆栈卡”称为堆栈,但不应将其与堆栈数据结构混淆。我将为您的游戏中的卡片对象推荐两种数据结构:
保持某种形式的排序的列表(以便您知道这些卡的顺序)。 ArrayList在这里运行良好。
用于快速检索的HashHap(请记住,Map通常会丢失其排序)。
由于SAME卡将存在于两种数据结构中,因此您将不会使用更多的内存,但将具有两种数据结构(快速查找和排序)的优势。你必须处理一些家务,但这是预期的。
答案 1 :(得分:0)
您还可以保留Map<Key, Card>
按照其唯一ID跟踪卡片(Key
可能是String
,Integer
等)。然后,您可以致电Stack
,Vector
继承自Card
,并传递您想要删除的Stack
。
这假设您受限于{{1}}数据结构,您可能不会(请参阅其他答案)。
答案 2 :(得分:0)
嗯,这就是堆栈的工作原理。要从堆栈中获取除顶部项目之外的其他项目,您必须弹出所有项目并将它们推送到另一个堆栈,直到找到您的项目。然后你必须弹出另一个堆栈中的所有项目并将它们推回到原始堆栈。
如果您手动寻找卡片,那就是您要做的事情。
答案 3 :(得分:0)
堆叠是LIFO,你必须弹出物品,直到你找到所需的物品。然后再推回弹出的物品。你应该使用像地图这样的东西来获得带有ID的物品。