标签:
注意:如何取一组不重复的随机数,这种方法的前提是取数的这个数组没有重复的数方可。
(1)换位排除法
1 /** 2 * @param arr 取数的数组 3 * @param noRepeatNumbers 要获取不重复数的个数 4 */ 5 public static int[] getNoRepeatNumByChanget(int[] arr, int noRepeatNumbers) { 6 7 int[] newArr = new int[noRepeatNumbers]; 8 for (int i = 0; i < noRepeatNumbers; i++) { 9 Random random = new Random(); 10 //角标是从i-arr.length-1的随机数 11 //这里0%5=0 1%5=1 2%5=2 .....5%5=0; 12 int s = random.nextInt(arr.length - 1) % (arr.length - 1 - i + 1) 13 + i; 14 int temp = arr[i]; 15 //将随机取到的下标的值,与i交换,然后下一次取i++到length的一个随机数 16 arr[i] = arr[s]; 17 arr[s] = temp; 18 newArr[i] = arr[i]; 19 } 20 return newArr; 21 }
(2)set排异法
1 /** 2 * 3 * @param arr 要遍历的数组 4 * @param noRepeatNumbers 获取不重复数的个数 5 * @return 6 */ 7 public static Set<Integer> getNoRepeatNumBySet(int[] arr, 8 int noRepeatNumbers) { 9 Random random = new Random(); 10 Set<Integer> set = new HashSet<Integer>(); 11 while (true) { 12 int s = random.nextInt(arr.length); 13 //将随机的下标的数添加到set集合中 14 set.add(Integer.valueOf(arr[s])); 15 //如果set中的数长度等于要获取不重复数的个数时,跳出循环 16 if (set.size() == noRepeatNumbers) { 17 break; 18 } 19 } 20 return set; 21 22 }
标签:
原文地址:http://www.cnblogs.com/dukc/p/5491677.html