LeetCode第284题 - 窥视迭代器

题目

解答一

java 复制代码
package leetcode.editor.cn;
//leetcode submit region begin(Prohibit modification and deletion)
// Java Iterator interface reference:
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

import java.util.Iterator;
import java.util.LinkedList;

class PeekingIterator implements Iterator<Integer> {
    private LinkedList<Integer> values = new LinkedList<>();
    private Iterator<Integer> valuesIterator = null;
    private int nextIndex = 0;

    public PeekingIterator(Iterator<Integer> iterator) {
        // initialize any member here.
        while (iterator.hasNext()) {
            values.addLast(iterator.next());
        }

        valuesIterator = values.iterator();
    }

    // Returns the next element in the iteration without advancing the iterator.
    public Integer peek() {
        return values.get(nextIndex);
    }

    // hasNext() and next() should behave the same as in the Iterator interface.
    // Override them if needed.
    @Override
    public Integer next() {
        ++nextIndex;
        return valuesIterator.next();
    }

    @Override
    public boolean hasNext() {
        return valuesIterator.hasNext();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

解答二

java 复制代码
package leetcode.editor.cn;
//leetcode submit region begin(Prohibit modification and deletion)
// Java Iterator interface reference:
// https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html

import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;

class PeekingIterator implements Iterator<Integer> {
    private LinkedList<Integer> values = new LinkedList<>();
    private ListIterator<Integer> valuesIterator = null;

    public PeekingIterator(Iterator<Integer> iterator) {
        // initialize any member here.
        while (iterator.hasNext()) {
            values.addLast(iterator.next());
        }

        valuesIterator = values.listIterator();
    }

    // Returns the next element in the iteration without advancing the iterator.
    public Integer peek() {
        Integer value = valuesIterator.next();
        valuesIterator.previous();
        return value;
    }

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

    @Override
    public boolean hasNext() {
        return valuesIterator.hasNext();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

测试用例

java 复制代码
package leetcode.editor.cn;

import org.junit.Test;

import java.util.List;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class PeekingIteratorTest {
    private PeekingIterator iter = null;

    @Test
    public void test1() {

        iter = new PeekingIterator(List.of(1, 2, 3).iterator());

        assertTrue(iter.hasNext());
        assertTrue(String.valueOf(iter.peek()), iter.peek() == 1);
        assertTrue(iter.next() == 1);

        assertTrue(iter.hasNext());
        assertTrue(String.valueOf(iter.peek()), iter.peek() == 2);
        assertTrue(iter.hasNext());

        assertTrue(iter.next() == 2);
        assertTrue(iter.hasNext());

        assertTrue(String.valueOf(iter.peek()), iter.peek() == 3);

        assertTrue(iter.next() == 3);
        assertFalse(iter.hasNext());
    }
}
相关推荐
程序员清风14 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
皮皮林55115 小时前
利用闲置 Mac 从零部署 OpenClaw 教程 !
java
华仔啊20 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing21 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
日月云棠2 天前
各版本JDK对比:JDK 25 特性详解
java
用户8307196840822 天前
Spring Boot 项目中日期处理的最佳实践
java·spring boot
JavaGuide2 天前
Claude Opus 4.6 真的用不起了!我换成了国产 M2.5,实测真香!!
java·spring·ai·claude code
IT探险家2 天前
Java 基本数据类型:8 种原始类型 + 数组 + 6 个新手必踩的坑
java
花花无缺2 天前
搞懂new 关键字(构造函数)和 .builder() 模式(建造者模式)创建对象
java
用户908324602732 天前
Spring Boot + MyBatis-Plus 多租户实战:从数据隔离到权限控制的完整方案
java·后端