Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从堆栈中获取具有特殊id的对象?_Java_Stack_Loops_Identifier - Fatal编程技术网

Java 如何从堆栈中获取具有特殊id的对象?

Java 如何从堆栈中获取具有特殊id的对象?,java,stack,loops,identifier,Java,Stack,Loops,Identifier,在我的cardgame项目中,我模拟了一个带有堆栈的卡片堆。堆/堆栈的每个卡都有一个唯一的标识符 现在我想从堆栈中取出具有特定标识符的对象。 有没有一个有效的选择来实现它?首先我想到一个迭代器,它将在堆栈上进行迭代。。。但是如果我在堆栈上有很多卡,这不是一个最佳解决方案。您还可以保留一个映射,通过卡的唯一ID来跟踪卡(键可能是字符串,整数,等等)。然后您可以调用从Vector继承的Stack,传入您想要删除的卡 这是假设您受限于堆栈数据结构,而您可能不是(请参阅其他答案)。堆栈就是这样工作的。要

在我的cardgame项目中,我模拟了一个带有堆栈的卡片堆。堆/堆栈的每个卡都有一个唯一的标识符

现在我想从堆栈中取出具有特定标识符的对象。
有没有一个有效的选择来实现它?首先我想到一个迭代器,它将在堆栈上进行迭代。。。但是如果我在堆栈上有很多卡,这不是一个最佳解决方案。

您还可以保留一个
映射
,通过卡的唯一ID来跟踪卡(
可能是
字符串
整数
,等等)。然后您可以调用从
Vector
继承的
Stack
,传入您想要删除的


这是假设您受限于
堆栈
数据结构,而您可能不是(请参阅其他答案)。

堆栈就是这样工作的。要从堆栈中获取除顶部项目以外的其他项目,必须弹出所有项目并将它们推到另一个堆栈上,直到找到项目为止。然后,您必须从另一个堆栈中弹出所有项目,并将它们推回原始堆栈


如果您手动查找卡片,您也会这样做。

堆栈是后进先出,您必须弹出项目,直到找到所需的项目。然后将弹出的项目推回。您应该使用类似map的方法更轻松地获取具有ID的项目。

您可以将“卡片堆栈”称为堆栈,但这不应与堆栈数据结构混淆。我将为游戏中的卡对象推荐两种数据结构:

  • 保存某种形式的排序的列表(以便您知道卡片的顺序)。ArrayList在这里很有用

  • 用于快速检索的HashHap(请记住,地图通常会失去其顺序)


  • 由于两种数据结构中都会出现同一张卡,因此您不会使用太多的内存,但将具有两种数据结构的优点(快速查找和排序)。您必须处理一些内部事务,但这是意料之中的。

    堆栈真的是正确的选择吗?还是需要使用一个堆栈?我认为这里有点混乱。。。游戏中的牌被称为“一堆牌”,但不应使用堆栈数据结构表示。它几乎就像一个“银行队列”,可以用一个链表来表示,以使迭代成为可能(测量每个客户的烦恼程度:-))