java - 用 Java 存储卡片列表的最佳集合?

标签 java collections

我有一个 Card 类,现在我想创建一个 Deck 类。我正在查看 Collections 中可用的内容来存储卡片列表,我知道我需要尽可能多的自由来操作卡片。

我希望能够在牌组中的任何位置插入新牌、洗牌(Collections.shuffle() 应该可以)、查看任何牌并从顶部、底部和中间的任何位置取出(移除)牌。任何你可以用一堆卡片做的事情都应该是可能的。例如,没有“仅后进先出”的限制。

这是我目前所发现的以及我在每个问题上遇到的问题:

  • List:似乎提供了我需要的尽可能多的自由,但很明显,我需要为更简单的事情添加一些辅助函数,例如在顶部选择卡片。目前仍然是我最喜欢的解决方案。
  • Stack:可能会完成我所要求的一切,但是,据我所知,这并不是最好的实现(扩展 Vector 而不是只是其行为中的堆栈?)<
  • Deque:具有我想要的功能,但似乎不允许在任何索引处插入新项目(也不是“getAt(index)”afaik)

对于我正在尝试做的事情,是否有比上述任何类(class)都更好的预制类(class)?如果不存在任何“完美”的东西,我应该使用哪个类作为扩展的基础?

注意:我不知道我现在是否关心同步。我也从 Java 6 的角度来看这个问题,但我对 Java 7 解决方案持开放态度,特别是如果有现成的解决方案的话。

最佳答案

我会采用基于List 的方法。您的要求相当模糊,但是 List 为您想要执行的操作提供了良好的基础。我建议在您的 Deck 类中包装一个 List(而不是让 Deck 扩展一个具体的 List 类,例如作为 ArrayListLinkedList)。所有 Deck 行为都应该由 Deck 类定义;您当然不希望自动继承所有 List 行为,因为它可能并不都适合您的 Deck 对象。

关于java - 用 Java 存储卡片列表的最佳集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434308/

相关文章:

java - 我已经使用 docker 构建了命令并且输出成功并且我无法打开本地主机 7604

Java SWT 列表 - 使其不可选择

java - 使用 BATCH 从文件夹运行 WebApp

java - 如何使用系统属性值作为记录器处理程序模式的一部分

java - 在 Java 中转换泛型 Collection 的类型

java - ModelAndView 和 ModelMap 有什么区别?

javascript - 如何读取MVC集合中的序列化数据(通过Jquery POST发送)

java - 使用包含空字段的复合键读取 Multimap

java - 有没有比保留相同功能的三个嵌套 map 更好的解决方案?

java - 使用 HashSet 而不是 ArrayList 来传达意图?