如何在Java中生成随机排列?

2023-12-21

生成 n 个数字的随机排列的最佳方法是什么?

例如,假设我有一组数字 1、2 和 3 (n = 3)

所有可能排列的集合:{123, 132, 213, 231, 312, 321}

现在,我如何生成:

  • 上述集合的元素之一(随机选择)
  • 如上所示的整个排列集

换句话说,如果我有一个包含 n 个元素的数组,如何随机排列它们?请协助。谢谢。


java.util.Collections.shuffle(List);

javadoc 链接Collections.shuffle https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#shuffle-java.util.List-

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
java.util.Collections.shuffle(list);

值得注意的是,您可以使用很多算法。以下是它在 Sun JDK 中的实现方式:

public static void shuffle(List<?> list, Random rnd) {
    int size = list.size();
    if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
        for (int i=size; i>1; i--)
            swap(list, i-1, rnd.nextInt(i));
    } else {
        Object arr[] = list.toArray();

        // Shuffle array
        for (int i=size; i>1; i--)
            swap(arr, i-1, rnd.nextInt(i));

        // Dump array back into list
        ListIterator it = list.listIterator();
        for (int i=0; i<arr.length; i++) {
            it.next();
            it.set(arr[i]);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Java中生成随机排列? 的相关文章

随机推荐

  • 将二维数组传递给 C 函数的方法

    我一周前开始学习C语言 为了测试 我决定编写一个井字游戏 我有一块田地 int field 3 3 和一个函数 printField void printField int field 3 3 for int i 0 i lt 3 i fo
  • Java XPath 计算返回类型

    有没有办法确定 XPath 评估的返回类型是什么 我希望 XPath 尽可能通用地匹配 它应该匹配一个节点列表 如果不能匹配 则匹配一个节点 如果不能匹配 则匹配一个值 有没有一种简单的方法可以在Java中实现这个功能 JAXP XPath
  • 发生异常时记录响应正文

    我在用retrofit对于 http 调用gson作为转换器 在某些情况下 当 gson 尝试将响应转换为对象时 我会抛出异常 我想知道在这种情况下的实际响应是什么 例如 这是我收到的异常消息 Expected a string but w
  • 使用 linq 更新对象集合中的属性

    有一个对象列表 其对象结构如下 public class Schedule public int ID get set public string Name get set public Schedule 对数据执行 linq 查询我可以看
  • Android - 立即启动闹钟服务?

    我创建了一个启动接收器 每 5 分钟重复调用一次唤醒意图服务 但无法弄清楚如何在安装应用程序后立即启动该服务 我不想依赖用户在设备开始运行之前重新启动设备 到目前为止 这是我的代码 public class OnBootReceiver e
  • 让 Rails #destroy_all 运行得更快

    我想跑Alarm destroy all不过 每个警报都与许多警报相关联AlarmEvents 并且每个AlarmEvent与许多相关AlarmEvent Measurements 两个关联都标记为 dependent gt destroy
  • 如何强制输入日期格式为 dd/mm/yyyy? [复制]

    这个问题在这里已经有答案了 我有一个小问题 我正在开发一个网络系统 表单字段类型日期让我很头疼 该系统仅适用于巴西用户 因此日期格式应为 dd mm yyyy 当从使用葡萄牙语的计算机访问该网站时 HTML 表单字段类型的日期按照我想要的方
  • WPF RichTextBox 拼写检查 ComException

    我在尝试在某些 Windows 8 1 计算机上启用拼写检查时遇到异常 两者都有最新更新 操作系统语言是俄语 NET Framework 4 7 是俄语 System Reflection TargetInitationException
  • 使用 MouseUp 和 MouseDown 事件或其他事件模拟单击的最佳方法是什么?

    在 WPF 中 大多数控件都有MouseUp and MouseDown事件 以及鼠标按钮特定的变体 但不是简单的Click可以立即使用的事件 如果您想使用这些事件获得类似点击的行为 您需要处理这两个事件 我认为这有点痛苦 明显的问题是你不
  • 在两个 Rails 项目之间共享模型 - 使用 git 子模块?

    我有一个 Rails 网站 它分为两个独立的项目 公共网站和管理网站 由于两个站点都使用相同的数据库 因此模型在应用程序之间共享 实际上现在它们是重复的 我这里遇到的问题是 当公共项目中发生模型更新时 我需要将更改复制到管理项目中 我环顾四
  • Solr 停用词替换为 _ 符号

    我的自动建议中的 solr 停用词有问题 所有停用词均替换为 符号 例如 我在字段 deal title 中有文本 简单文本 当我尝试搜索单词 简单 时 solr 显示下一个结果 简单文本 但我期望 简单文本 有人可以解释一下为什么会这样工
  • 通过构造函数进行依赖项注入的 Azure Functions 找不到作业函数

    我使用 NET 5 创建了 Azure Function 版本 3 并通过类的构造函数进行依赖项注入 请参阅下面的虚拟代码 public class MyAzureFunction private readonly IMyRepositor
  • 在不使用 OpenCL 的情况下对 Intel IGP(例如 Iris Pro 5200)硬件进行编程

    台式机 i7 4770k 4GHz 的内核峰值 GFLOPS 为 4GHz 8 AVX 4 FMA 4 个内核 512 浮点运算 https stackoverflow com questions 15655835 flops per cy
  • 在 Javascript 中模拟鼠标点击[重复]

    这个问题在这里已经有答案了 寻找一个用鼠标左键单击由 ID 或类名称标识的图像 按钮的 Javascript 等待 x 秒并重复 并且能够在开发者工具控制台点击 chrome 和 firefox 中运行 尝试自己编写它 因为我认为这将是一个
  • 如何将属性传递给 Loader 创建的对象?

    我有一个QMLLoader加载另一个 qml Loader id gaugeLoader PieMenu id pieMenu MenuItem text Add Bar Gauge onTriggered gaugeLoader sour
  • (SwiftUI) 导航栏高度问题

    我必须在视图 2 中使用大标题 navigationBarTitleDisplayMode large 和 searchable 但在这种情况下 View 3 中导航栏的高度设置得很奇怪 我认为 视图 2 中导航栏的高度和搜索栏高度的总和应
  • 程序运行时出现 C++ STATUS_ACCESS_VIOLATION 错误

    每次我运行该程序时 都会弹出这个神秘的错误 表示我遇到了某种类型的状态访问冲突 我尝试用谷歌搜索它 结果是我可能试图访问一些不允许的内存 非常感谢您的帮助 这是我运行程序时出现的错误 2 main a 5772 exception hand
  • 在django模板中将负数转换为正数?

    如何在django模板中将负数转换为正数 for balance in balances balance amount endfor 如果balance amount是负数 我想将其转换为正数 我想建议安装Django 数学过滤器 http
  • D3 自定义曲线:区域的束插值

    考虑这个 D3JS 图 它使用basis插值 在 D3JS v3 中 我可以使用bundle插值 interpolate bundle tension 0 在区域上实现这种类型的渲染 请注意图表的每个部分如何与其相邻部分完美契合 这就是我需
  • 如何在Java中生成随机排列?

    生成 n 个数字的随机排列的最佳方法是什么 例如 假设我有一组数字 1 2 和 3 n 3 所有可能排列的集合 123 132 213 231 312 321 现在 我如何生成 上述集合的元素之一 随机选择 如上所示的整个排列集 换句话说