我有一个Card类,现在我想创建一个Deck类。我正在查看收藏中可用于存储卡片列表的内容,因为我知道我需要尽可能多地自由操作卡片。
我希望能够在卡座中的任何位置插入新卡片,将它们随机播放(Collections.shuffle()应该可以工作),查看任何卡片并从顶部,底部和中间的任何位置取出(移除)卡片。你可以用一堆卡片做任何事情。例如,没有“仅限LIFO”限制。
到目前为止,我发现了以及每个问题:
对于我正在尝试做的事情,是否有一个比上述任何一个更好的预制课程?如果不存在“完美”,那么我应该将哪个类用作扩展的基础?
值得注意的是:我现在不知道我是否关心同步。我也从Java 6的角度来看这个问题,但我对Java 7解决方案持开放态度,特别是如果有现成的解决方案的话。
答案 0 :(得分:9)
我采用基于List
的方法。您的要求相当模糊,但List
为您想要做的事情提供了良好的基础。我建议在List
课程中包含Deck
(而不是让Deck
扩展具体的List
课程,例如ArrayList
或LinkedList
)。所有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类更快更轻。
缺点:
- 你需要编写(非常基本的)方法来操作数组。