如何从卡列表中生成所有唯一的卡对?

时间:2012-09-10 15:14:17

标签: java data-structures poker

我正在实施一个手强度评估器,用于评估所有可能的 在交出一手牌和翻牌后,其余47张牌都成对。

我已经实现了评估器,但是我缺少要比较的所有可能组合。我很想为Hand创建一个类,它由两张卡组成,并将每个组合存储在一个集合HashSet中。我应该选择哪种数据结构?如果HashSet是最好的, 那么我如何强制Hand的每个实例化都是唯一的呢?

2 个答案:

答案 0 :(得分:2)

HashSet似乎是合理的,但由于排序可能会有所影响,您可能需要考虑TreeSet。如果您在equals中实施compareToComparable / Hand方法,则Set会强制唯一性。

答案 1 :(得分:0)

我会为卡片编号或将它们放在列表中。

如果您使用列表,则可以

Set<Card> inHand = ...
for(int i=0;i<list.size();i++) {
  Card card1 = list.get(i);
  if (inHand.contains(card1)) continue;

  for(int j=i+1;j<list.size();j++) {
      Card card2 = list.get(j);
      if (inHand.contains(card2)) continue;

      // process card1 and card2