Java简单易懂的生成不重复随机整数数组的方法

                /**
	         * 利用set的无序性产生不重复的随机整数数组
	         * @param min 整数数组的最小值
	         * @param max 整数数组的最大值
	         * @return
	         */
	        public static int[] randSort(int min,int max) {
				int[] arr = new int[max-min+1];
				//给arr依次赋值
				for (int i = 0; i < arr.length; i++) {
					arr[i]=min+i;
				}
				Random random = new Random();
				Set<Float> set = new HashSet<Float>();
				for (int i : arr) {
					set.add(i+random.nextFloat());
				}
				int j=0;
				for (Float float1 : set) {
					arr[j] = (int)float1.floatValue();
					j++;
				}
				return arr;
			}

本方法利用了set的无序性将输入的整数值进行排序,因为对于同一整数数组,set遍历出的结果是一样的,如[3,4,5]不管遍历多少次可能都是[5,4,3],但是[3.1,4.1,5.1]和[3.2,4.2,5.2]返回的整数部分的顺序是不相同的,根据这个原理,每次遍历时随机生成一个小数加到整数的后面,存到set里,取出时再将小数部分去掉,就得到了一个无重复的随机整数数组了(注:1.8jdk中set数组近乎有序,整数以大小排序,小数以小数点后面第一位的大小排序,以此类推,由于本函数每个整数都加了一个随机小数,所以不受版本影响)


测试结果:

                int [] arr = MathTools.randSort(100, 110);
		for (int i : arr) {
			System.out.print(i+" ");//107 103 108 104 100 109 105 101 110 106 102 

		}
		System.out.println();
		int [] arr2 = MathTools.randSort(100, 110);
		for (int i : arr2) {
			System.out.print(i+" ");//108 104 102 109 105 101 110 106 100 107 103 

		}
		System.out.println();
		int [] arr3 = MathTools.randSort(100, 110);
		for (int i : arr3) {
			System.out.print(i+" ");//100 108 104 103 107 102 110 106 105 101 109 

		}
		System.out.println();
		int [] arr4 = MathTools.randSort(100, 110);
		for (int i : arr4) {
			System.out.print(i+" ");//110 108 104 100 105 101 106 102 109 103 107
		}


你可能感兴趣的:(随机数,不重复随机数,无序数组)