设计模式-迭代器模式

文章目录

迭代器模式

如:集合中常见的迭代器

定义:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又无需暴露该对象的内部实现,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据

比如LeetCode:173. 二叉搜索树迭代器,可以内部各种方式实现,但是对外就是如下两个方法

java 复制代码
public int next()

public boolean hasNext()
  • ac
java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class BSTIterator {
    // O(h)的存储
    Stack<TreeNode> sta;

    private void left2Stack(TreeNode root){
        while (root != null){
            sta.push(root);
            root = root.left;
        }
    }

    public BSTIterator(TreeNode root) {
        sta = new Stack<>();
        left2Stack(root);
    }

    /** @return the next smallest number */
    public int next() {
        TreeNode node = sta.pop();
        if(node.right != null){
            left2Stack(node.right);
        }
        return node.val;
    }

    /** @return whether we have a next smallest number */
    public boolean hasNext() {
        return ! sta.isEmpty();
    }
}

/**
 * Your BSTIterator object will be instantiated and called as such:
 * BSTIterator obj = new BSTIterator(root);
 * int param_1 = obj.next();
 * boolean param_2 = obj.hasNext();
 */
相关推荐
yaoxin52112313 分钟前
131. Java 泛型 - 目标类型与泛型推断
java
惊骇世俗王某人30 分钟前
1. 深入理解ArrayList源码
java·开发语言
用户403159863966339 分钟前
表达式并发计算
java·算法
SimonKing1 小时前
告别System.currentTimeMillis()!Java高精度计时最佳实践
java·后端·程序员
Dcs1 小时前
JUnit 5架构如何用模块化颠覆测试框架?
java
肉肉不想干后端1 小时前
gRPC服务架构整合springboot部署实践指南
java
天天摸鱼的java工程师1 小时前
volatile关键字实战指南:八年Java开发者详解五大应用场景
java·后端
刃神太酷啦1 小时前
C++ 多态详解:从概念到实现原理----《Hello C++ Wrold!》(14)--(C/C++)
java·c语言·c++·qt·算法·leetcode·面试
wjm0410062 小时前
C++后端面试八股文
java·c++·面试