当前位置: 首页 > 知识库问答 >
问题:

集合排序方法与迭代

滕成双
2023-03-14

我正在研究一个扑克牌洗牌的问题,并找到了两个解决方案。

目标是将存储在阵列中的所有52张扑克牌作为卡对象进行洗牌。卡类具有与其关联的id和名称。

现在,一种方法是使用for循环迭代,然后在临时卡对象持有者和随机数生成器的帮助下,我们可以交换两个对象。这一直持续到我们到达一半的卡片。

另一种方法是使用随机生成器编号实现可比较的覆盖比较方法,因此每次调用该方法时都会得到随机响应。

你觉得哪条路更好?

共有2个答案

宰父夕
2023-03-14

首先,你描述的比较器不起作用。更多信息请点击这里。TLDR:比较必须是可重复的,所以如果下次比较< code>b和< code>a时,你的比较器说< code>a小于< code>b,它应该返回“更大”,而不是随机值。< code>Comparable也是如此。

如果我是你,我宁愿使用< code>Collections#shuffle方法,它“使用一个默认的随机源随机排列指定的列表。所有排列发生的可能性大致相等”。依赖他人的代码总是更好,然后编写自己的代码,尤其是在标准库中。

鲜于谦
2023-03-14

您不应该使用返回随机结果的比较器进行排序,因为这样一来,这些随机结果可能会彼此不一致(例如,假设一个

这样做的标准方法确实涉及循环,但您的描述听起来很奇怪,我怀疑您的想法也可能不会产生理想的结果。(如果更新了问题以更清楚地说明“迭代使用 for 循环”方法的含义,我将对此进行更新。

(有一种方法可以通过排序获得良好的混排效果:将每个元素与一个随机数配对——例如,0范围内的一个随机浮点数..1 -然后使用该数字作为关键字进行排序。但是这比Fisher-Yates慢,并且需要额外的内存。在低级语言中,它通常也需要更多的代码;在高级语言中,它可以更简洁;我猜想对于Java来说,结果是差不多相等的。)

[编辑补充:]正如路易斯·瓦瑟曼(Louis Wasserman)在评论中非常明智地说的那样,当你的语言的标准库有一个现成的函数来做一件事时,你通常应该使用它。除非你这样做是为了,例如,一个家庭作业,它要求你找到并实现一个算法来解决问题。

 类似资料:
  • 问题内容: 是否存在Java惯用法来通过sorted的元素进行成对迭代?我的意思是,每次迭代都可以访问集合的一个元素和集合的下一个元素吗? 对于排序的s(和数组),可以使用集合中的索引来完成: 但是那又如何呢?(因为您可以使用,它等同于大小写)。 因此,例如,如果您的排序集包含值{1、2、3、4},则迭代将按该顺序针对(1、2),(2、3),(3、4)对。 问题答案: 您可以通过以下方式简单地实现

  • 问题内容: 我有一个Java集合: 现在在显示列表之前有一个字段,我想按此排序此集合。 有什么办法可以做到吗? 问题答案: 使用比较器: 此外,如果实现,则只需使用 使用JDK 8,语法要简单得多。 更简单 最简单的 显然,初始代码也可以用于JDK 8。

  • 问题内容: 我找不到使用此方法的任何示例,所有示例都给出了第二个参数“ null”。我听说此方法用于根据多个标准对类进行排序,但找不到示例。 对于本课程,如果我想根据学生的姓名和年龄对学生列表进行排序,如何使用方法Collections sort(List,Comparator) 问题答案: 在你现有的学生班级的基础上,这通常是我的工作方式,尤其是当我需要多个比较器时。 用法: 编辑 自Java

  • 主要内容:1 集合元素的排序,2 Collections sort方法,3 字符串正序排序,4 字符串倒序排序,5 包装类型排序,6 自定义对象排序1 集合元素的排序 我们可以对以下元素进行排序: 字符串对象 包装类对象 用户自定义对象 Collections类提供用于对集合的元素进行排序的静态方法。如果集合元素为Set类型,则可以使用TreeSet。但是,我们无法对List的元素进行排序。Collections类提供用于对List类型元素的元素进行排序的方法。 2 Collections so

  • 问题 你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。 解决方案 heapq.merge() 函数可以帮你解决这个问题。比如: >>> import heapq >>> a = [1, 4, 7, 10] >>> b = [2, 5, 6, 11] >>> for c in heapq.merge(a, b): ... print(c) ... 1 2 4 5 6 7

  • 本文向大家介绍Java中Iterator(迭代器) 与Collection(集合)用法与区别,包括了Java中Iterator(迭代器) 与Collection(集合)用法与区别的使用技巧和注意事项,需要的朋友参考一下 迭代器(Iterator) 它在Collection Framework中使用,以便在需要时检索元素。 它可以与“next”函数一起使用,以移动和访问下一个元素。“remove”函