我有一个 Card 类,现在我想创建一个 Deck 类。我正在查看 Collections 中可用的内容来存储卡片列表,我知道我需要尽可能多的自由来操作卡片。
我希望能够在牌组中的任何位置插入新牌、洗牌(Collections.shuffle() 应该可以)、查看任何牌并从顶部、底部和中间的任何位置取出(移除)牌。任何你可以用一堆卡片做的事情都应该是可能的。例如,没有“仅后进先出”的限制。
这是我目前所发现的以及我在每个问题上遇到的问题:
- List:似乎提供了我需要的尽可能多的自由,但很明显,我需要为更简单的事情添加一些辅助函数,例如在顶部选择卡片。目前仍然是我最喜欢的解决方案。
- Stack:可能会完成我所要求的一切,但是,据我所知,这并不是最好的实现(扩展 Vector 而不是只是其行为中的堆栈?)<
- Deque:具有我想要的功能,但似乎不允许在任何索引处插入新项目(也不是“getAt(index)”afaik)
对于我正在尝试做的事情,是否有比上述任何类(class)都更好的预制类(class)?如果不存在任何“完美”的东西,我应该使用哪个类作为扩展的基础?
注意:我不知道我现在是否关心同步。我也从 Java 6 的角度来看这个问题,但我对 Java 7 解决方案持开放态度,特别是如果有现成的解决方案的话。
最佳答案
我会采用基于List
的方法。您的要求相当模糊,但是 List
为您想要执行的操作提供了良好的基础。我建议在您的 Deck
类中包装一个 List
(而不是让 Deck
扩展一个具体的 List
类,例如作为 ArrayList
或 LinkedList
)。所有 Deck
行为都应该由 Deck
类定义;您当然不希望自动继承所有 List
行为,因为它可能并不都适合您的 Deck
对象。
关于java - 用 Java 存储卡片列表的最佳集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434308/