您的位置:首页 > 编程语言 > Java开发

[Java]不重复随机数生成简易算法

2016-03-17 11:14 621 查看

方法一

通过单个数组简易实现不重复随机数生成,先上源码。

/**
* 获取随机数组
* @param 源数组
* @param size 目标数组大小
* @return 随机数组
*/
public static int[] getRandomRes(int[] source,int size){
if (source == null && size > source.length) {
return;
}
int[] result = new int[size];
Random random = new Random();
for (int i = 0; i < size; i++) {
int randomIndex = random.nextInt(source.length - 1 - i);
int randomRes = source[randomIndex];
result[i] = randomRes;
int temp = source[randomIndex];
source[randomIndex] = source[source.length - 1 - i];
source[source.length - 1 - i] = temp;
}
return result;
}


下面看图解,数字为数组的index。



黑色数字表示能随机到的数,红色代表不能随机到数。

因此只能随机到index:0~4的数,假设是2,然后将2与index5互换位置。



此时结果result[] = {2}

继续循环



从前index:0~3中循环,假设取出index0,与index4互换

此时结果为result = {2,0}

依次类推。

优点:简单快捷

缺点:每次无法取到最后一个数。

方法二

不断随机,使用
Set
去重

/**
*生成随机数组
*@param size 目标数组大小
*@param max 目标数最大值
*/
public Set<Integer> getRandomSet(int size,int max){
Random random= new Random();
Set<Integer> result= new LinkedHashSet<Integer>();
while (generated.size() < size)
{
Integer next = rng.nextInt(max) + 1;
generated.add(next);
}
}


此处使用
LinkedHashSet
保证插入顺序与结果相同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: