哪个Java Collection最能支持一副卡片?

时间:2013-06-30 22:56:59

标签: java collections

我在java中创建了一个PlayingCardDeck类,它由一个包含PlayingCard实例的集合支持。我的目标是对不同类型的实际shuffling进行文字模拟。

我编写了一个compareTo方法,要求甲板的内容(即集合的内容)是唯一的。我还需要集合来维护插入顺序以模拟shuffle

从本质上讲,我认为归结为:

  • 集合必须排除compareTo函数的重复项才能正常工作
  • 必须保持插入顺序,以便洗牌有效果
  • 原子地能够pop顶部的牌是很好的。

但我觉得我可能已经过度复杂了,并且我不知道在哪种情况下使用哪个集合

对于需要维护插入顺序并禁止重复的集合,是否自然适合? ArraySet

2 个答案:

答案 0 :(得分:4)

不要使用Set;使用Collection最容易编码的内容 - 例如List(可能是ArrayList)。

Set通常用于确保其元素未知时的唯一性(即不是由代码生成)。您可以通过 logic 而不是Collection类型来确保唯一性。但是当一张套牌从卡片中取出时,套装是不合适的。

List将允许使用Collections.shuffle(List)来简化随机播放。


与您的问题没有直接关系,但我会为您的Suit课程的RankCard使用枚举。使用枚举将教您语言并允许非数字面值(图片卡)的自然排序,并且需要为Ace(高/低)定制排序的位置。

创建一个Hand类,其中List<Card>Deck类具有Card deal()方法。这样的事情。一旦完成所有课程和方法,如何将它们全部组合在一起应该是显而易见的。

答案 1 :(得分:3)

我坚持使用ArrayList

  • 它会保持插入顺序(直到你操作它)。
  • 很容易排序。
  • 很容易改组。

此外,有许多纸牌游戏允许多个套牌,因此您可能最终需要重复的卡片。