wl
2022-10-21 201ea73fb531ee30fd57465e210bd523eb10c95d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.ycl.common.util;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
 
public class RandomNumberGenerator {
    /**
     * 这是典型的随机洗牌算法。
     * 流程是从备选数组中选择一个放入目标数组中,将选取的数组从备选数组移除(放至最后,并缩小选择区域)
     * 算法时间复杂度O(n)
     * @return 随机8为不重复数组
     */ 
    public static synchronized String generateNumber(int count) { 
        String no=""; 
        //初始化备选数组 
        int[] defaultNums = new int[10]; 
        for (int i = 0; i < defaultNums.length; i++) { 
            defaultNums[i] = i; 
        } 
   
        Random random = new Random(); 
        int[] nums = new int[count]; 
        //默认数组中可以选择的部分长度 
        int canBeUsed = 10; 
        //填充目标数组 
        for (int i = 0; i < nums.length; i++) { 
            //将随机选取的数字存入目标数组 
            int index = random.nextInt(canBeUsed); 
            nums[i] = defaultNums[index]; 
            //将已用过的数字扔到备选数组最后,并减小可选区域 
            swap(index, canBeUsed - 1, defaultNums); 
            canBeUsed--; 
        } 
        if (nums.length>0) { 
            for (int i = 0; i < nums.length; i++) { 
                no+=nums[i]; 
            } 
        } 
   
        return no; 
    } 
//    private static final int LENGTH = 6; 
   
    private static void swap(int i, int j, int[] nums) { 
        int temp = nums[i]; 
        nums[i] = nums[j]; 
        nums[j] = temp; 
    } 
       
   
    public static void main(String[] args) { 
      System.out.println(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + generateNumber(6));
    }
}