Java十大经典排序算法的实现图解
366
2022-08-16
Java案例实现不重复的随机数
需求:获得十个1-20的随机数,要求随机数不能重复,存储到集合中并遍历
分http://析:
1.创建Set集合对象,可以使用HashSet也可以使用TreeSet,区别在于TreeSet是排序后的2.创建随机数对象,获取一个随机数3.判断集合长度是否大于10,是停止生成、存储并遍历否:继续生成直到长度大于10停止生成、存储并遍历4.输出
代码:
public class SetDemo {
public static void main(String[] args) {
//创建Set集合对像
Set
//创建随机数对象
Random r=new Random();
while(s.size()<10){
int num= r.nextInt(20)+1;
s.add(num);
}
for (Integer i:s){
System.out.println(i);
}
}
}
补充:
通过单个数组简易实现不重复随机数生成,先上源码。
/**
* 获取随机数组
* @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。
黑色数字表http://示能随机到的数,红色代表不能随机到数。因此只能随机到index:0~4的数,假设是2,然后将2与index5互换位置。
此时结果result[] = {2}
继续循环
从前index:0~3中循环,假设取出index0,与index4互换http://,此时结果为result = {2,0},依次类推。
优点:简单快捷缺点:每次无法取到最后一个数。
不断随机,使用Set去重
/**
*生成随机数组
*@param size 目标数组大小
*@param max 目标数最大值
*/
public Set
Random random= new Random();
Set
while (generated.size() < size)
{
Integer next = rng.nextInt(max) + 1;
generated.add(next);
}
}
此处使用LinkedHashSet保证插入顺序与结果相同。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~