Java使用ThreadLocalRandom高效生成随机数

通用编程

  • 1. 生成随机数
    • 1.1 Java使用ThreadLocalRandom高效生成随机数
      • 1.1.1 生成指定区间一个随机数
      • 1.1.2 生成随机数组
    • 1.2 Python生成随机数
  • 2. 分割数组
    • 2.1 Java中Arrays.copyOfRange()方法
    • 2.2 Python中的np.array_split()方法
    • 2.3 Java自定义splitArr()方法
    • 2.4 ArrayList的subList()方法

1. 生成随机数

从JDK7开始后,就不应该使用Random生成随机数了。现在使用随机数生成器时,大多使用ThreadLocalRandon。它会产生更高质量的随机数,并且速度更快。

1.1 Java使用ThreadLocalRandom高效生成随机数

1.1.1 生成指定区间一个随机数

/**
     * @return 生成[m, n)的一个随机数
     */
    public static int randint(int m, int n) {
        ThreadLocalRandom rand1 = ThreadLocalRandom.current();
        return rand1.nextInt(m, n);
    }

1.1.2 生成随机数组

/**
     * @param n [0-n)长度
     * @return 生成[0-n)范围不重复的随机数组
     */
    public static int[] randarr(int n) {
        return ThreadLocalRandom.current().ints(0, n).distinct().limit(n).toArray();
    }

1.2 Python生成随机数

2. 分割数组

2.1 Java中Arrays.copyOfRange()方法

int[] arr = new int[] { 1, 2, 3, 4, 5};
arr= Arrays.copyOfRange(arr, 1, 4);
System.out.println(Arrays.toString(arr));

执行结果:

[2, 3, 4]

2.2 Python中的np.array_split()方法

chrom = np.arange(1, 10)
print(chrom)
segments = np.array_split(chrom, [3, 5, 8], axis=0)
print(segments)

执行结果:

[1 2 3 4 5 6 7 8 9]
[array([1, 2, 3]), array([4, 5]), array([6, 7, 8]), array([9])]

2.3 Java自定义splitArr()方法

static List<int[]> splitArr(int[] arr, int[] idx) {

        int[] idx_ = new int[idx.length + 2];
        System.arraycopy(idx, 0, idx_, 1, idx.length);

        int last = idx_.length - 1;
        idx_[0] = 0;
        idx_[last] = arr.length;

        List<int[]> segments = new ArrayList<>();
        for (int i = 1; i < last; i++) {
            int[] segmentArr = Arrays.copyOfRange(arr, idx_[i], idx_[i + 1]);
            segments.add(segmentArr);
        }
        return segments;
    }

    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int[] idx1 = {0, 2, 4, 7,};
        List<int[]> segments = splitArr(arr1, idx1);

        segments.forEach(e -> System.out.println(Arrays.toString(e)));
    }

执行结果:

[1, 2]
[3, 4]
[5, 6, 7]
[8, 9, 10]

2.4 ArrayList的subList()方法

你可能感兴趣的:(java,开发语言,c++)