Java 如何从堆栈中获取具有特殊id的对象?
在我的cardgame项目中,我模拟了一个带有堆栈的卡片堆。堆/堆栈的每个卡都有一个唯一的标识符 现在我想从堆栈中取出具有特定标识符的对象。Java 如何从堆栈中获取具有特殊id的对象?,java,stack,loops,identifier,Java,Stack,Loops,Identifier,在我的cardgame项目中,我模拟了一个带有堆栈的卡片堆。堆/堆栈的每个卡都有一个唯一的标识符 现在我想从堆栈中取出具有特定标识符的对象。 有没有一个有效的选择来实现它?首先我想到一个迭代器,它将在堆栈上进行迭代。。。但是如果我在堆栈上有很多卡,这不是一个最佳解决方案。您还可以保留一个映射,通过卡的唯一ID来跟踪卡(键可能是字符串,整数,等等)。然后您可以调用从Vector继承的Stack,传入您想要删除的卡 这是假设您受限于堆栈数据结构,而您可能不是(请参阅其他答案)。堆栈就是这样工作的。要
有没有一个有效的选择来实现它?首先我想到一个迭代器,它将在堆栈上进行迭代。。。但是如果我在堆栈上有很多卡,这不是一个最佳解决方案。您还可以保留一个
映射
,通过卡的唯一ID来跟踪卡(键
可能是字符串
,整数
,等等)。然后您可以调用从Vector
继承的Stack
,传入您想要删除的卡
这是假设您受限于堆栈
数据结构,而您可能不是(请参阅其他答案)。堆栈就是这样工作的。要从堆栈中获取除顶部项目以外的其他项目,必须弹出所有项目并将它们推到另一个堆栈上,直到找到项目为止。然后,您必须从另一个堆栈中弹出所有项目,并将它们推回原始堆栈
如果您手动查找卡片,您也会这样做。堆栈是后进先出,您必须弹出项目,直到找到所需的项目。然后将弹出的项目推回。您应该使用类似map的方法更轻松地获取具有ID的项目。您可以将“卡片堆栈”称为堆栈,但这不应与堆栈数据结构混淆。我将为游戏中的卡对象推荐两种数据结构:
保存某种形式的排序的列表(以便您知道卡片的顺序)。ArrayList在这里很有用
用于快速检索的HashHap(请记住,地图通常会失去其顺序)
由于两种数据结构中都会出现同一张卡,因此您不会使用太多的内存,但将具有两种数据结构的优点(快速查找和排序)。您必须处理一些内部事务,但这是意料之中的。堆栈真的是正确的选择吗?还是需要使用一个堆栈?我认为这里有点混乱。。。游戏中的牌被称为“一堆牌”,但不应使用堆栈数据结构表示。它几乎就像一个“银行队列”,可以用一个链表来表示,以使迭代成为可能(测量每个客户的烦恼程度:-))