生成随机数从数组里随机取值

前短时间朋友发来一个题,说是面试题,这几天悠闲着拿出瞧瞧。
如题:定义一个整形数组,长度不限,值不限,要求用随机数取出来并打印,值不能取重复的,用最少循环次数解决刚开始看到的时候就分析了下:
1、数组长度不限,值不限,可能有重复值
2、随机数有一样的值,根据下标去取的话会取到一样的值
当时想到用递归去判断(由于代码繁琐,效率不高,这里就不贴出来了),判断如果这个随机数没出现就去取取了递归一次重来,这样做的性能很差,所以最后放弃了。
然后想到取一个删一个,但是数组没有删除的方法,于是想到了把数组转成集合,因为集合有移除的方法,取一个移一个,最后取完为止,这是我目前想到效率相对来说快一点的。
把代码贴出来,因为是用记事本写的,也没运行过,关键字可能会有错,主要还是思想到位,如果各位有更好的还请多指教指教~ 

 

	Integer[] a = new Integer[] { 1, 2, 3, 4, 5 };
		List list = new ArrayList();
		list = Arrays.asList(a);
		Random ran = new Random();
		int intSize = a.length;
		
		for (int I = 0; I < intSize; I++) {
			int o = ran.nextInt(list.size() - 1);
			if (null != list.get(o) && intSize >= 0) {
				System.out.println(list.get(o));
				list.remove(o);
				intSize--;
			} else {
				continue;
			}
		}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值