`
whicky
  • 浏览: 1936 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Random相同种子产生同一序列

阅读更多
    public void test_shuffff() {
        List<String> list = Lists.newArrayList( "7451880340:10138652","7451880338:10138652","7451862057:10138652","7451862249:10138652","7451862316:10138652");
        Collections.shuffle(list,new Random(10));
        System.out.println(list);
    }

偶然发现
Collections.shuffle(List,Random)
的时候,多次执行的结果都是一致的,看shuffle的源码里
            // Shuffle array
            for (int i=size; i>1; i--)
                swap(arr, i-1, rnd.nextInt(i));

怎么也应该是随机的啊!
找寻半天才发现,Random类的说明:
If two instances of {@code Random} are created with the same
* seed, and the same sequence of method calls is made for each, they
* will generate and return identical sequences of numbers

也就是说,如果Random实例的种子是一样的,那么同样的方法执行结果都是一样的,举例:
    public static void main(String[] args) {
        Random rd = new Random(10);
        System.out.println(rd.nextInt(1));
        System.out.println(rd.nextInt(3));
        System.out.println(rd.nextInt(4));
        System.out.println(rd.nextInt(8));
    }

执行多次打印结果都是一致的:
引用
0
0
1
3

要注意与不指定种子的Random的区别,默认的Random()是以当前系统时间为种子的,每次执行自然就不一样了
分享到:
评论

相关推荐

    shell脚本如何获取随机数random

    这种方法的优点是简单易用,但是当多台计算机在同一时间生成随机数时,可能会因为种子相同而导致生成相同的随机数序列,所以这种方法在并发环境下并不推荐使用。 其次,文章提到了使用环境变量$RANDOM来生成随机数...

    深入浅析Random类在高并发下的缺陷及JUC对其的优化

    种子值决定了随机数序列的生成,相同的种子会产生相同的随机数序列。默认情况下,Random类使用当前系统时间作为种子,确保每次实例化时的种子不同,从而生成不同的随机数。但在并发环境中,多个线程可能在同一时刻...

    prando:用于JavaScript和TypeScript的确定性伪随机数生成器

    其目标是: 产生一个随机数序列通过种子可重现快速生成与此相反的是,它并没有试图在。 Prando是在TypeScript中创建的,以增强代码强度,但可以在JavaScript和TypeScript中使用。 在TypeScript项目中使用它的好处是...

    delphi产生不同随机数

    // 使用1234作为种子值,每次运行将得到相同的随机数序列 ``` 此外,Delphi还有其他第三方库,如`System.Math.Random`,提供了更高级的随机数生成功能,如均匀分布、正态分布等。例如,使用`TMath.Random`生成标准...

    浅谈java中Math.random()与java.util.random()的区别

    然而,`Math.random()` 的缺点是它不能直接控制随机数的种子,因此每次程序运行时,如果你在同一时刻调用 `Math.random()`,它将生成相同的序列。这在某些情况下可能不是期望的行为。 相反,`java.util.Random` 是...

    C#中的随机数[参考].pdf

    选择不同的种子会得到不同的随机数序列,但需要注意,如果在同一毫秒内创建多个`Random`实例,可能会导致它们使用相同的种子,从而产生相同的序列。 `Random`类提供了几个用于生成随机数的方法: - `Next()`:返回...

    C#产生一个随机整数

    这里,通过使用`DateTime.Now.Ticks`的正值和负值作为种子,创建了两个不同的`Random`对象,这样即使在同一时刻创建,也能尽量减少生成相同随机序列的可能性。 ### 需要注意的关键点 1. **初始化`Random`对象**:...

    C#随机数的使用

    为了避免每次运行程序时生成相同的序列,`System.Random`类会默认使用系统当前时间作为种子值,确保每次运行时都能获得不同的随机数序列。 #### 三、初始化随机数生成器 `System.Random`类提供了两种初始化方法: ...

    【转】利用系统时间可预测破解java随机数

    由于系统时间并非真正的随机值,而是连续递增的,因此连续创建的`Random`实例可能会产生相似甚至相同的随机数序列。在高并发环境中,这种问题尤为明显,因为多个线程可能几乎在同一时刻初始化`Random`实例。 为了...

    C#编写的生成随机整数,小数

    如果需要在不同时间生成相同的随机数序列,可以使用相同的种子值初始化`Random`对象。例如: ```csharp Random rand = new Random(1234); // 使用1234作为种子值 ``` 5. **线程安全考虑**: 当在多线程环境中...

    java中使用随机数发生器

    - `public Random(long seed)`:允许开发者自定义种子值,同一种子生成的序列总是相同的,便于复现随机数序列。 2. **常用方法**: - `public boolean nextBoolean()`:生成一个随机的布尔值,true和false出现的...

    c# 随机数的产生

    如果需要在同一程序中生成不重复的随机数,可以使用固定的种子,但要注意这可能导致序列可预测: ```csharp Random random = new Random(12345); // 使用固定种子 ``` 生成随机整数时,我们可以调用`Next()`方法。...

    CDMA.zip_cdma_cdma仿真_伪随机序列CDMA_伪随机码

    3. **生成**:PN码通常由移位寄存器和逻辑门电路产生,可以根据预设的种子生成周期性的码序列。 仿真实验目的: 1. **验证理论**:仿真实验可以验证CDMA通信系统的理论模型,如信号传播、多址干扰(MAI)和远近效应...

    华农C#作业随机数

    默认情况下,`Random`类的实例会根据系统时钟生成种子,这可能导致相同的操作在多次运行中产生相同的随机数序列。如果希望在特定情况下重现随机数序列,可以手动传递一个种子值: ```csharp Random ...

    URANG-Unique Random Number Generator:生成具有指定长度的唯一数字的程序。-开源

    URANG可能采用了伪随机数生成器(PRNG),因为它们可以重复生成同一序列,这对于测试和调试是有益的。PRNG通过一个初始值(种子)和数学算法来产生序列,如果种子和算法固定,生成的序列将可预测。URANG可能通过增加...

    文件操作实验.ppt

    默认情况下,`rand()`生成的序列是可预测的,即每次运行程序时,同一种子产生的随机数序列相同。 - **种子**:随机数生成器的初始值被称为种子。如果不设置种子,`rand()`会使用一个默认值,这可能导致每次运行时...

    c#低开销随机不重复数

    不过,每个`Random`实例都有自己的种子,如果多个实例在同一时刻创建,可能会产生相同的序列。为了避免这种情况,通常建议在一个线程范围内只使用一个`Random`实例。 2. **生成不重复的随机数** 要生成不重复的...

Global site tag (gtag.js) - Google Analytics