使用随机算法产生一个数,要求把1-1000W之间这些数全部生成

1,605 阅读2分钟

其实这就是考察高效率,解决产生冲突的问题

以100为例,1000W时将value值更改即可,选取1-100范围方便时输出检验是否正确。

先构建一个value大小的数组,按下标存储1-value范围的值。

有了这样一个数组之后,用random.nextInt(value) 每次随机生成[0,value)范围的值,用count+value 作为下标交换count+value 和count位置的两个数,比如交换 list[0+5] 和list[0]。 下一次count++,交换某个位置和list[1],这样相当于随机选取某个位置的数,逐一放在数组的第0个位置、第1个位置。注意:count+value不能超过原本value的值,每次count++都要value--。

public static void main(String[] args) {

Random random = new Random();

long start = System.currentTimeMillis();

int value = 100;

//使用数组速度更快

int[] list = new int[value];

for (int j = 0; j < value; ++j) {

list[j] = j+1;

}

int index = 0;

int count = 0;

int tmp = 0;

while (value > 0) {

index = random.nextInt(value);

//System.out.println(list[count + index]);

tmp = list[count + index];

list[count + index] = list[count];

list[count] = tmp;

++count;

--value;

}

long end = System.currentTimeMillis();

//----验证是否正确

Arrays.sort(list);

int i = 0, size = list.length;

for (; i < size; ++i) {

//System.out.println(list[i]);

if (list[i] != (i + 1))

System.out.println(i + "error" + list[i]);

}

//----验证是否正确

System.out.println("creat4------");

System.out.println("执行耗时 : " + (end - start) / 1000f + " 秒 ");

System.out.println("完了,集合大小为" + list.length);

}

实际测试结果:

creat3------

执行耗时 : 5.169 秒

完了,集合大小为10000000

creat4------

执行耗时 : 0.729 秒

完了,集合大小为10000000

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等