
package LeetCode284; import java.util.Iterator; class PeekingIterator implements Iterator方法{ private Iterator iterator; private Integer nextElement; public PeekingIterator(Iterator iterator) {//将迭代器初始化为本类中的迭代器,并将第一个元素赋予nextElement // initialize any member here. this.iterator=iterator; nextElement=iterator.next(); } // Returns the next element in the iteration without advancing the iterator. public Integer peek() { return nextElement; } // hasNext() and next() should behave the same as in the Iterator interface. // Override them if needed. @Override public Integer next() { Integer ret = nextElement; nextElement = iterator.hasNext() ? iterator.next() : null; //利用nextElement=iterator.next()移动指针 return ret; } @Override public boolean hasNext() { return nextElement != null; } }
进阶问题要求拓展顶端迭代器的设计,使其适用于所有类型,不局限于整数。
对于静态类型语言如 Java、可以通过使用泛型的方式拓展设计,在 PeekingIterator 类中定义泛型,使用时可以用任意类型。
class PeekingIteratorimplements Iterator { private Iterator iterator; private E nextElement; public PeekingIterator(Iterator iterator) { this.iterator = iterator; nextElement = iterator.next(); } public E peek() { return nextElement; } @Override public E next() { E ret = nextElement; nextElement = iterator.hasNext() ? iterator.next() : null; return ret; } @Override public boolean hasNext() { return nextElement != null; } }