栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

284. 窥探迭代器

Java 更新时间:发布时间: 百科书网 趣学号
题目

代码
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中没有实现的方法额外实现
  • 内部定义一个变量,来储存当前指针的值,这样peek操作就不会移动指针
拓展

进阶问题要求拓展顶端迭代器的设计,使其适用于所有类型,不局限于整数。

对于静态类型语言如 Java、可以通过使用泛型的方式拓展设计,在 PeekingIterator 类中定义泛型,使用时可以用任意类型。

class PeekingIterator implements 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;
    }
}

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/294700.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号