【发布时间】:2013-12-03 05:02:55
【问题描述】:
是否有循环遍历数据结构的迭代器?
假设有一个数组:
int[] arr = {-1,5,7,-1,-1,-1}
我想从这个数组中找到第一个非-1值的索引并开始从随机位置搜索 (idx = random.nextInt(arr.length) )。例如 idx = 4;
所以首先检查 arr[4] == -1,然后检查 arr[5] == -1 等等。 如果到达数组的末尾,则从 0 位置开始并继续直到找到非 -1。保证数组中至少有一个不等于-1的值。
可以这样做:
int idx = -1;
for (int i = random.nextInt(arr.length); ; i++) {
if (i == arr.length) {
/** start over */
i = 0;
}
if (-1 != arr[i]) {
idx = i;
break;
}
}
左右:
int idx = -1;
int i = random.nextInt(arr.length);
do {
if (-1 != arr[i]) {
idx = i;
}
i == arr.length ? i=0 : i++;
} while (-1 == idx);
是否有支持循环的迭代器(调用 next() ,如果到达数组末尾则自动从 0 开始)?
局限:1)不考虑效率; 2) 首选标准Java API。
【问题讨论】:
-
可以构建这样一个迭代器,但与使用已有的循环相比,它不够清晰、效率更低,也更不容易。
标签: java arrays loops iterator