从JDK7开始后,就不应该使用Random生成随机数了。现在使用随机数生成器时,大多使用ThreadLocalRandon。它会产生更高质量的随机数,并且速度更快。
/**
* @return 生成[m, n)的一个随机数
*/
public static int randint(int m, int n) {
ThreadLocalRandom rand1 = ThreadLocalRandom.current();
return rand1.nextInt(m, n);
}
/**
* @param n [0-n)长度
* @return 生成[0-n)范围不重复的随机数组
*/
public static int[] randarr(int n) {
return ThreadLocalRandom.current().ints(0, n).distinct().limit(n).toArray();
}
int[] arr = new int[] { 1, 2, 3, 4, 5};
arr= Arrays.copyOfRange(arr, 1, 4);
System.out.println(Arrays.toString(arr));
执行结果:
[2, 3, 4]
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])]
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]