当前位置: 首页 > 面试题库 >

Java的Collections.shuffle在做什么?

轩辕亮
2023-03-14
问题内容

最近,我发现自己需要确保清单不正确。Hibernate非常好,可以完美地返回它。愚蠢的冬眠,没有读懂我的想法。

我看了看我的Java API,它告诉我它的shuffle方法是这样做的:

使用默认的随机性源随机排列指定的列表。

作为我的好奇乔治,我想知道这到底意味着什么。我可以选一门数学课程来学习吗?我可以看到代码吗?Java,您对我的ArrayList做什么?!?!?

更具体地说,这里使用了哪些数学概念?


问题答案:

是的,您可以看一下代码;它基本上会执行Fisher-Yates随机播放。在这里(感谢OpenJDK,感谢开源:-P):

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]);
        }
    }
}

交换方法:

 private static void swap(Object[] x, int a, int b) {
    Object t = x[a];
    x[a] = x[b];
    x[b] = t;
}


 类似资料:
  • 问题内容: 好的,我尝试查找或shift的含义,但是此站点对此进行了解释:http : //www.janeg.ca/scjp/oper/shift.html 如果和孩子说话,会是什么解释? 问题答案: 计算机是二进制设备。因此,数字由1和0的序列表示。 移位只是简单地左右移动那些1和0的序列。 因此,操作员要做的就是将这些位向右移一位。 考虑数字101: 在这种情况下,最低有效位被截断了。显然,

  • 问题内容: 在Java中,我刚刚发现以下代码是合法的: 仅供参考,接收方只是具有以下签名的帮助程序类: 我从未见过这种记法。这是如何运作的?有什么方法可以更常规地进行编码吗? 问题答案: 这是从包含的类主体外部实例化非静态内部类的方法,如Oracle docs中所述 。 每个内部类实例都与其包含类的实例相关联。当你从一个内部类 中 包含它的类,它使用的默认容器的实例: 但是,如果要在Foo外部创建

  • 问题内容: 用 Java 做什么?我阅读了文档,但仍然无法确定。 医生说: 返回可以从此输入流读取(或跳过)的字节数,而不会被该输入流的方法的下一个调用者阻塞。下一个调用者可能是同一线程或另一个线程。 类InputStream的可用方法始终返回0。 封锁 是什么意思?这仅表示同步通话吗? 最重要的是,该方法的目的是什么? 问题答案: 这里的阻塞与线程或同步无关。相反,它涉及到阻塞的IO(见本获取更

  • 问题内容: 返回类型-方法返回的值的数据类型;如果该方法未返回值,则返回void。 http://download.oracle.com/javase/tutorial/java/javaOO/methods.html 那好吧..这是我的问题: http://download.oracle.com/javase/tutorial/java/javaOO/enum.html 上面的代码没有无效就无法

  • 我想要做的是一步一步地监视我的脚本的执行(VM执行的每一个计算),并存储关于这些计算的信息(类“bar”中的变量“foo”变成了行“soandso”上的4)作为一种运行缓存,每当发生错误时就转储到系统控制台。 这可能吗?

  • 问题内容: 为什么我的代码不起作用? 结果是:0 1 2 3 4 5 6 7 8 9。 我期待一个 随机改组的序列 。 问题答案: 不能按预期应用于原始类型的数组。当应用于时,将产生的列表,而不是的列表。因此,您将重新整理一个新创建的列表。 这是Java中可变参数和泛型的微妙行为。被声明为 因此,它可以采用某些类型的多个参数并生成包含这些参数的列表,也可以采用一个类型的参数并返回此数组支持的列表(