284. Peeking Iterator
2016-04-03 04:11
281 查看
本来的Iterator类里面是自带next()和hasNext()的,但是现在加了peek()之后会调用一次iterator.next(),然后iterator的顺序就乱了。
所以一旦被peek过我们就需要把这个被next()弹出的元素记录下来,如果再调用next就返回这个临时的元素,再调用peek就还返回这个元素,再调用hasNext就返回有没有被peek过或者hasNext()本身
bug记录:
peek()本身的时候也要检查有没有被peek过,否则会一直往后面看去,就会丢失元素
所以一旦被peek过我们就需要把这个被next()弹出的元素记录下来,如果再调用next就返回这个临时的元素,再调用peek就还返回这个元素,再调用hasNext就返回有没有被peek过或者hasNext()本身
class PeekingIterator implements Iterator<Integer> { private Iterator<Integer> it; private Integer next; private boolean isPeeked; public PeekingIterator(Iterator<Integer> iterator) { // initialize any member here. it = iterator; isPeeked = false; } // Returns the next element in the iteration without advancing the iterator. public Integer peek() { if (isPeeked) { return next; } else { isPeeked = true; next = it.next(); return next; } } // hasNext() and next() should behave the same as in the Iterator interface. // Override them if needed. @Override public Integer next() { Integer res; if(isPeeked) { res = next; } else { res = it.next(); } isPeeked = false; return res; } @Override public boolean hasNext() { return isPeeked? true: it.hasNext(); } }
bug记录:
peek()本身的时候也要检查有没有被peek过,否则会一直往后面看去,就会丢失元素
相关文章推荐
- [LeetCode] Combine Two Tables 联合两表
- 高算 openmpi no route to host
- C++对象模型:成员变量<一>非静态成员变量
- Web墨卡托投影(转) Google Maps地图投影全解析(1):Web墨卡托投影
- MyView绘图类的对View的重载(android)
- 为WebRTC 应用部署Turn Server
- CentOS中nginx负载均衡和反向代理的搭建
- linux vi命令的使用方法
- 使用git推送代码到开源中国以及IDEA环境下使用git
- POJ 1328 Radar Installation
- Oriented Bounding Box 碰撞检测
- python中的字符串
- 80. Remove Duplicates from Sorted Array II
- lamp环境配置
- BST (Binary Search Tree)
- Android的SQLiteDataBase小项目,实现user类登陆注册以及student类增删改查
- python中yaml模块的使用
- 10012---Trail ~ MediaConversion
- Nginx文件类型错误解析漏洞--攻击演练
- vi 替换字符串