文档章节

284. Peeking Iterator

52iSilence7
 52iSilence7
发布于 2018/10/21 22:25
字数 281
阅读 6
收藏 0

Description

Tag: Design Difficulties: Medium

Given an Iterator class interface with methods: next() and hasNext(), design and implement a PeekingIterator that support the peek() operation -- it essentially peek() at the element that will be returned by the next call to next().

Example:

Assume that the iterator is initialized to the beginning of the list: [1,2,3].

Call next() gets you 1, the first element in the list.
Now you call peek() and it returns 2, the next element. Calling next() after that still return 2.
You call next() the final time and it returns 3, the last element.
Calling hasNext() after that should return false.
Follow up: How would you extend your design to be generic and work with all types, not just integer?

Solution

// Java Iterator interface reference:
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
class PeekingIterator implements Iterator<Integer> {
    private Iterator<Integer> iterator;
    private Integer next;
    private boolean cache = false;
	public PeekingIterator(Iterator<Integer> iterator) {
	    // initialize any member here.
	    this.iterator = iterator;
	}

    // Returns the next element in the iteration without advancing the iterator.
	public Integer peek() {
        if (!cache && hasNext()) {
            cache = true;
            next = iterator.next();
        }
        return next;
	}

	// hasNext() and next() should behave the same as in the Iterator interface.
	// Override them if needed.
	@Override
	public Integer next() {
	    if (cache) {
            cache = false;
            return next;
        }
        return iterator.next();
	}

	@Override
	public boolean hasNext() {
	    if (cache) {
            return true;
        }
        return iterator.hasNext();
	}
}

Note: Only check next is null or not cannot determine whether there is next or not. A list can contain null integers. So it is false design.

© 著作权归作者所有

共有 人打赏支持
52iSilence7
粉丝 4
博文 77
码字总数 56798
作品 0
海淀
高级程序员
私信 提问
实现迭代器 Peeking Iterator

问题: Given an Iterator class interface with methods: and , design and implement a PeekingIterator that support the operation -- it essentially peek() at the element that will ......

叶枫啦啦
2017/12/19
0
0
Tomcat日志报警WARN OgnlValueStack:255

tomcat log报错,请帮忙看看是什么问题?应如何解决?谢谢! 10:37:31,577 WARN OgnlValueStack:255 - Caught an exception while evaluating expression 'value' against value stack java.......

tinaxiao
2014/10/08
859
2
开发的app 在小米手机上不能运行

这是在下面手机上运行的报错日志: 10-11 11:37:49.524: E/art(31965): Throwing OutOfMemoryError "Failed to allocate a 36 byte allocation with 0 free bytes and 0B until OOM" 10-11 1......

晚秋枫叶
2016/10/11
976
2
ALGO-118 算法训练 友好数

  9的约数和有:1+3=4   4的约数和有:1+2=3   所以9和4不是友好的。   220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284   284的约数和有:1 2 4 71 142=220   所以220和284...

xnh_565175944
2018/04/26
0
0
luci 编译问题!!

/usr/lib/lua/luci/dispatcher.lua:284: No valid theme found stack traceback: [C]: in function 'assert' /usr/lib/lua/luci/dispatcher.lua:284: in function 'dispatch' /usr/lib/lua/l......

何潇
2012/11/07
744
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 舔狗是没有好下场的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听什么# #今天听这个# 分享 Nirvana 的歌曲《Smells Like Teen Spi...》 《Smells Like Teen Spi...》- Nirvana 手机党少...

小小编辑
41分钟前
9
2
Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
2
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
5
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部