复制Iterator元素给数组并保证数组长度等于Iterator元素个数

需求如题,iterator没有size()方法,获取不到元素的个数,所以就想无论你有多少个元素就按你有10个元素来处理,放了10个元素之后发现还有元素没有放入,这时候就想对数组进行扩容并将旧数组复制给新数组。但是扩容之后可能会有很多空位置出现,所以在iterator.hasNext()时我们需要使用临时变量来记录iterator循环了多少次,这个临时变量就是iterator的元素个数,有了这个个数之后就好办了。代码:

private static int[] convertIteratoToList(Iterator<Integer> iterator) {
		int[] smallResult = new int[10];
		int i = 0;
		while (iterator.hasNext()) {
			int size=smallResult.length;
			if (i >= size) {
				// 扩容
				int[] bigResult = new int[smallResult.length * 2];
				// 复制result内容到bigResult
				System.arraycopy(smallResult, 0, bigResult, 0, size);
				smallResult = bigResult;
				bigResult = null;
			}
			smallResult[i++] = iterator.next();
		}
		if (i != smallResult.length) {// 去掉数组内的空位置
			int[] bigResult = new int[i];
			System.arraycopy(smallResult, 0, bigResult, 0, i);
			smallResult = bigResult;
			bigResult = null;
		}
		return smallResult;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值