給定一個迭代器類的接口,接口包含兩個方法:?next()
?和?hasNext()
。設計并實現一個支持?peek()
?操作的頂端迭代器 -- 其本質就是把原本應由?next()
?方法返回的元素?peek()
?出來。
示例:
假設迭代器被初始化為列表?[1,2,3]
。調用?next()
返回 1,得到列表中的第一個元素。 現在調用?peek()
?返回 2,下一個元素。在此之后調用?next()
仍然返回 2。 最后一次調用?next()
?返回 3,末尾元素。在此之后調用?hasNext()
?應該返回 false。
進階:你將如何拓展你的設計?使之變得通用化,從而適應所有的類型,而不只是整數型?
?
// Java Iterator interface reference: // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html class PeekingIterator implements Iterator<Integer> {private Iterator<Integer> mIterator;private Integer next;public PeekingIterator(Iterator<Integer> iterator) {// initialize any member here.this.mIterator = iterator;}// Returns the next element in the iteration without advancing the iterator.public Integer peek() {if (next == null && mIterator.hasNext()) {next = mIterator.next();}return next;}// hasNext() and next() should behave the same as in the Iterator interface.// Override them if needed. @Overridepublic Integer next() {if (next == null) {return mIterator.next();} else {Integer temp = next;next = null;return temp;}}@Overridepublic boolean hasNext() {return next != null || mIterator.hasNext();} }
?