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());
    }
}
相关推荐
Small black human12 分钟前
Spring-创建第一个SpringBoot项目
java·spring boot·intellij-idea
User_芊芊君子32 分钟前
【Java】抽象类与接口全解析
java·开发语言
肉肉不想干后端39 分钟前
DDD架构中的Assembler转换:从混乱到清晰的架构演进
java
GalaxyPokemon40 分钟前
RPC - Response模块
java·前端·javascript
武昌库里写JAVA1 小时前
大模型更重要关注工艺
java·开发语言·spring boot·学习·课程设计
幻奏岚音1 小时前
Java数据结构——第一章Java基础回顾
java·开发语言·jvm·笔记·学习
岁忧1 小时前
(LeetCode 每日一题) 2016. 增量元素之间的最大差值 (数组)
java·c++·算法·leetcode·职场和发展·go
爬虫程序猿1 小时前
如何利用 Java 爬虫按关键字搜索 Amazon 商品:实战指南
java·开发语言·爬虫
风之旅人2 小时前
开发必备"节假日接口"
java·后端·开源