如果没有外部库,可以执行以下操作。与当前接受的答案相比,它在大范围内消耗的内存要少得多,因为没有创建数组。
上这样的课:class Range implements Iterable {
private int limit;
public Range(int limit) {
this.limit = limit;
}
@Override
public Iterator iterator() {
final int max = limit;
return new Iterator() {
private int current = 0;
@Override
public boolean hasNext() {
return current < max;
}
@Override
public Integer next() {
if (hasNext()) {
return current++;
} else {
throw new NoSuchElementException("Range reached the end");
}
}
@Override
public void remove() {
throw new UnsupportedOperationException("Can't remove values from a Range");
}
};
}
}
你可以这样简单地使用它:for (int i : new Range(5)) {
System.out.println(i);
}
你甚至可以重复使用它:Range range5 = new Range(5);
for (int i : range5) {
System.out.println(i);
}
for (int i : range5) {
System.out.println(i);
}
正如Henry Keiter在下面的注释中指出的,我们可以将以下方法添加到Range类(或任何其他类):public static Range range(int max) {
return new Range(max);
}
然后,在其他班我们可以import static package.name.Range.range;
只需打电话for (int i : range(5)) {
System.out.println(i);
}