At most 105 calls will be made to next and hasNext.
ac
public class Vector2D implements Iterator<Integer> {
private int list, index;
private List<List<Integer>> vec;
public Vector2D(List<List<Integer>> vec2d) {
list = 0;
index = 0;
vec = vec2d;
}
@Override
public Integer next() {
return vec.get(list).get(index++);
}
@Override
public boolean hasNext() {
while (list < vec.size()) {
if (index < vec.get(list).size()) {
return true;
} else {
list++;
index = 0;
}
}
return false;
}
}
/**
* Your Vector2D object will be instantiated and called as such:
* Vector2D i = new Vector2D(vec2d);
* while (i.hasNext()) v[f()] = i.next();
*/
public class Vector2D implements Iterator<Integer> {
private int row, i;
private List<List<Integer>> list;
public Vector2D(List<List<Integer>> vec2d) {
row = 0;
i = 0;
list = vec2d;
}
@Override
public Integer next() {
return hasNext() ? list.get(row).get(i++) : null;
}
@Override
public boolean hasNext() {
while (row < list.size() && i == list.get(row).size()) {
row++;
i = 0;
}
return row < list.size() && i < list.get(row).size();
}
}
/**
* Your Vector2D object will be instantiated and called as such:
* Vector2D i = new Vector2D(vec2d);
* while (i.hasNext()) v[f()] = i.next();
*/