PHP的range函数在php中的工作方式如下:
$leap_years = range(1900, 2000, 4);
创建类似于1900, 1904, 1908, ...
的数组,在Java中是否有类似的简单方法?
Iterable<Long>
(或Integer
或其他类型)相对简单。只需创建一个自定义的Iterator
,从起始值开始,并在每次调用next()
时递增,直到超过结束值。您还需要决定如何以及是否处理高到低的迭代等问题,但这并不难。您也可以将其作为List
的不可修改实现来执行,其中每个索引的值都是按需计算的(start + index * increment
)。List
,然后读取它。使用我描述的惰性范围迭代器就没有这个缺点。此外,如果确实需要将所有值直接存储在内存中,则可以轻松地将惰性迭代器复制到List
中。与构建数组相比,它唯一的劣势是一些自动装箱开销。public int[] range(int start, int end, int increment) {
if (start < end && increment < 0) throw new IllegalArgumentException();
if (start > end && increment > 0) throw new IllegalArgumentException();
int[] values = new int[Math.abs((end - start) / increment) + 1];
boolean reverse = start > end;
for (int i = start, index = 0; reverse ? (i >= end) : (i <= end); i+=increment, ++index)
{
values[index] = i;
}
return values;
}
range(2000, 1000, 100)
。 - whiskeysierrapublic int[] range(int startVal, int endVal, int increment) {
if (startVal >= endVal) {
//handle error or add option to go backwards
}
int count = ((endval - startval) / increment) + 1;
int[] myArr = new int[count];
for (int i=0; i <= count; i++) {
myArr[i] = startVal + (i * increment);
}
return myArr;
}
}
ArrayList<int>
应该改为 ArrayList<Integer>
。 - gen_EricArrayList<Integer>.toArray()
(返回的是Object[]
)强制转换为int[]
或者直接作为int[]
来使用。 - Martijn Courteaux