最佳集合存储Java的卡列表?

时间:2013-07-02 19:35:34

标签: java collections

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

我希望能够在卡座中的任何位置插入新卡片,将它们随机播放(Collections.shuffle()应该可以工作),查看任何卡片并从顶部,底部和中间的任何位置取出(移除)卡片。你可以用一堆卡片做任何事情。例如,没有“仅限LIFO”限制。

到目前为止,我发现了以及每个问题:

  • 列表:似乎提供了我所需要的尽可能多的自由,但显然,我需要为更简单的事情添加一些辅助功能,例如在顶部挑选卡片。现在仍然是我最喜欢的解决方案。
  • Stack:可能是我要问的所有,但是,从我所读到的,不是最好的实现(扩展Vector并且只是它的行为中的堆栈?)
  • Deque:有我想要的功能,但似乎不允许在任何索引处插入新项目(也不是“getAt(index)”afaik)

对于我正在尝试做的事情,是否有一个比上述任何一个更好的预制课程?如果不存在“完美”,那么我应该将哪个类用作扩展的基础?

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

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

在Arraylist上找LinkedList

链接列表为您提供了您正在查看Deque的所有功能,还允许插入和检索以及索引点。仍然允许shuffle并且还有peek方法,其中数组列表没有。它还有像堆栈一样的push和pop方法

答案 2 :(得分:0)

我会使用ArrayList,您仍然可以使用collections.shuffle(),并且在获取和添加元素时它会提供恒定的时间开销。

答案 3 :(得分:0)

您是否考虑使用普通的旧阵列? 您可以简单地向前推卡并插入打开的插槽,随时从任何插槽中选择任何内容,随机播放,以及可能需要处理的任何其他内容。 这可以更好地包装在一个类中。

上行:
- 比Java API中的任何list / map / set类更快更轻。

缺点:
- 你需要编写(非常基本的)方法来操作数组。