java获取随机、无重复元素的数组

本文介绍了一种生成特定长度且元素不重复的随机整数数组的方法,通过使用Java的Random类和自定义的insert方法,确保了数组中每个元素的唯一性,适用于构建二叉树等数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题引入:

发现,在构建二叉树时,经常需要自己手动的输入数值,进而去构建。普通二叉树自然是无所谓了,用一个Random类的实例去循环得到就行了。问题就在与,我就是不想让我的二叉树中 的元素的value属性重复。那怎么办?这时,就得找一个 没有重复元素的数组,而且数据还要自动生成的。

 

初步解决:

	/**
	 * 产生一个固定大小,最大值小于bound的一个Integer[]
	 * 去除重复。
	 * @param length 所要的数组的长度
	 * @param bound 数组中元素的的最大值(max=bound)
	 * @return
	 */
	public static Integer[] getIntegerArray(int length, int bound) {
		Integer[] arr = new Integer[length];
		
		// 数组中最后一个元素是默认的null,就一直去插入元素。
		while (arr[length - 1] == null) {
			// 得到一个随机数,范围是(0,bound]
			int num = new Random().nextInt(bound) + 1;
			insert(arr, num);
		}
		return arr;
	}
	
	/**
	 * 给数组中插入一个num,如果数组中存在num则不进行插入操作。
	 * @param arr 指定一个数组
	 * @param num 数据
	 */
	private static void insert(Integer[] arr, Integer num) {
		for (int i = 0; i < arr.length; i++) {
			if(arr[i] == null) {
				arr[i] = num;// 保存到数组
				break;
			}
			// 出现重复数据,不保存数据
			if(arr[i] == num) {
				break;
			}
		}
	}

初步测试:

	public static void main(String[] args) {
		Integer[] ints = getIntegerArray(10, 30);
		System.out.println(Arrays.toString(ints));
	}

结果展示:

当传入的参数是(10,30)得到了结果:

[2, 24, 1, 19, 9, 17, 25, 8, 14, 18]

另外:

为了证明我的方法是有效的,我做了好几次测试。

当传入的参数是(30,30)时,得到的是一个从1到30的所有数值,也就是说明了,它去除了重复元素(保证了没有重复元素)。

当传入的参数是(31,30) 时, 不好意思,我的eclipse直接卡死掉 了。这个时候,它 会不停的去创建随机数,尝试去插入到数组中。在1到30都出现过一次之后,再次插入肯定是不行的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你家宝宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值