【发布时间】:2016-04-25 22:00:25
【问题描述】:
我正在研究一个纸牌洗牌问题,并找到了两种解决方案。
目标是将存储在数组中的所有 52 张扑克牌作为 Card 对象进行洗牌。 Card 类具有与之关联的 id 和 name。
现在,一种方法是使用 for 循环进行迭代,然后在临时卡对象持有者和随机数生成器的帮助下,我们可以交换两个对象。这种情况一直持续到我们达到一半的牌。
另一种方法是使用随机生成器编号实现可比较的重写 compareto 方法,因此每次调用该方法时都会得到随机响应。
你认为哪种方式更好?
【问题讨论】:
-
“所以我们每次调用该方法时都会得到一个随机响应。”不是这样 - 比较器需要在每次调用时保持一致,否则排序算法可能会抱怨,例如TimSort reports violation of general contract.
-
已编辑。我会改用可比较的。
-
这两种方法都比使用
Collections.shuffle更可取,它只是做正确的事。 -
@user2296988 不,实现
Comparable以返回随机排序有同样的问题。当您在实现Comparable的集合上调用Collections.sort时,它只是使用实现自然排序的比较器调用重载,即它将Comparator.compare调用委托给Comparable.compareTo。
标签: java