【问题标题】:How to get a object with a special id out of the stack?如何从堆栈中获取具有特殊 id 的对象?
【发布时间】:2011-12-02 07:59:29
【问题描述】:

在我的纸牌游戏项目中,我模拟了一个带有堆栈的纸牌堆。堆/堆栈的每张牌都有一个唯一的标识符。

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

【问题讨论】:

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

标签: java stack loops identifier


【解决方案1】:

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

  1. 用于保持某种排序形式的列表(以便您知道卡片的顺序)。 ArrayList 在这里可以很好地工作。

  2. 用于快速检索的 HashHap(请记住,Map 通常会丢失其顺序)。

由于相同的卡将出现在两种数据结构中,因此您不会使用更多的内存,但将具有两种数据结构的优势(快速查找和排序)。您将不得不处理一些家务,但这是意料之中的。

【讨论】:

    【解决方案2】:

    您还可以保留 Map<Key, Card> 以通过卡片的唯一 ID 跟踪卡片(Key 可能是 StringInteger 等)。然后你可以调用remove(Object),它Stack继承自Vector,传入你想要删除的Card

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        堆栈是后进先出的,您必须弹出项目,直到找到需要的项目。然后将弹出的项目推回。您应该使用地图之类的东西来更轻松地获取具有 ID 的项目。

        【讨论】:

          猜你喜欢
          • 2015-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-19
          • 1970-01-01
          • 2015-10-13
          • 2023-01-27
          • 2017-07-03
          相关资源
          最近更新 更多