это действительно очень смутило меня.В принципе, я хочу распечатать элементы двух 1d-вектора поочередно.И я нашел решение, приложенное ниже, написанное другими.В методе main мы вызываем zigzagIterator.next()
, чтобы напечатать число, возвращаемое int num = iter.next()
. В методе next()
создается впечатление, что он создает новый объект iter каждый раз, когда метод next()
имеетбыл вызван.Но когда я отлаживал, я обнаружил, что только два объекта итератора были созданы.один для а1, другой для а2.Так что курсор в каждом объекте итератора сохраняет свою память для итерации до конца.
Мне просто не имеет смысла, что Iterator<Integer> iter = deque.pollLast()
вызывался несколько раз, но были созданы только два объекта.Надеюсь, кто-то может помочь!Большое спасибо.
public class ZigzagIterator {
Deque<Iterator<Integer>> deque;
public ZigzagIterator(List<Integer> v1, List<Integer> v2) {
deque = new LinkedList<Iterator<Integer>>();
if(v1.size() != 0) deque.offerFirst(v1.iterator());
if(v2.size() != 0) deque.offerFirst(v2.iterator());
}
public int next() {
Iterator<Integer> iter = deque.pollLast();
int num = iter.next();
if(iter.hasNext()) deque.offerFirst(iter);
return num;
}
public boolean hasNext() {
return (deque.size() != 0);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> a1= new ArrayList<Integer>();
a1.add(1);
a1.add(2);
a1.add(12);
List<Integer> a2= new ArrayList<Integer>();
a2.add(3);
a2.add(4);
a2.add(5);
a2.add(6);
ZigzagIterator zigzagIterator=new ZigzagIterator(a1, a2);
while (zigzagIterator.hasNext())
System.out.println(zigzagIterator.next());
}
}