Если вы действительно хотите понять нюансы между типами коллекций, то здесь.
List
технически не подходит, за исключением случаев, когда игра Bohnanza (что, хм, одна из величайших карточных игр всех времен, но я позволю мне закончить).
List
говорит, среди прочего, что одна рука, содержащая туза и короля треф, а другая рука, содержащая короля и туза треф, в основном не является той же рукой. Это гораздо более сильная зависимость от порядка, чем просто «ну, я хочу вспомнить порядок, в котором пользователь хочет видеть свои карты», - это свойство, которое имеют тонны коллекций, не относящихся к списку, например LinkedHashSet
и Guava's ImmutableSet
.
List
также подразумевает, что к карточке, которая находится в индексе N, придано особое значение. Это не относится к карточной игре, которую я знаю.
Set
обычно не подходит для карточных игр - только те, которые используют одну колоду совершенно уникальных карт.
Чтобы разрешить дубликаты, но при этом иметь равенство, не зависящее от порядка, используется тип Multiset
Гуавы. Например HashMultiset
или ImmutableMultiset
. Обратите внимание, что большинство реализаций мультимножества представляют несколько «равных» карт, храня только карту и счетчик, поэтому при итерации по ним дубликаты карты, которая находится у вас в руке, всегда должны появляться вместе. Если важно позволить пользователю свободно контролировать порядок карт в своей руке, вам понадобится LinkedListMultiset
.
Теперь, когда время урока закончилось ... хорошо, давайте будем честными. Вызов myHand.equals(yourHand)
или использование всей руки в качестве ключа для Map
- это не на самом деле , что вы когда-либо собираетесь делать ... так что продолжайте и используйте ArrayList
, вы ' все будет хорошо. : -)