为链表数据结构实现iterator接口
iterator作用
为所有的数据结构提供统一的访问方式。
接口对象
接口对象一共有3个方法,next()方法、return()方法、throw()方法。
next() 必填
用于for..of迭代。
该方法返回一个对象{value,done}。 value:元素值,done:状态位,用于指定循环是否结束。
return() 可选
用于break语句,或出错结束循环。
throw() 可选
throw方法主要是配合 Generator 函数使用
接口实现
通过内置Symbol.iterator属性来实现接口,该接口主要是返回一个对象指针,然后通过调用接口对象的next方法来实现访问下一个元素值。
具备iterator接口的对象
1:数组
2:字符串
3:函数的 arguments 对象
4: Set/Map 数据结构
5:TypedArray
6:NodeList 对象
接口调用
1:手动调用。
2:for..of语句
3:... (扩展运算符)
特点
for...of循环还有一个特点,就是会正确识别 32 位 UTF-16 字符
实例代码
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class Link {
/**
* 构造函数
*/
constructor(value) {
this.head = new Node(value);
}
/**
* 插入
* @param {any} value
* @param {any} item
*/
insert(value, item) {
let node = new Node(value);
let current = this.find(item);
node.next = current.next;
current.next = node;
}
/**
* 查询节点
* @param {any} item
* @returns {Node}
*/
find(item) {
let current = this.head;
while (current && current.value != item) {
current = current.next;
}
return current;
}
/**
* iterator接口实现
*/
[Symbol.iterator]() {
let current = null, target = this;
return {
next() {
current = current != null ? current.next : target.head;
if (current != null) {
return { value: current.value, done: false };
}
return { value: undefined, done: true };
},
return() {
return { done: true }
}
}
}
}
let l = new Link(0); l.insert(2, 0);
l.insert(5, 2);
l.insert(3, 2); // 到2的后面插入一个3 // for..of 方式调用接口
for (let o of l) {
console.log(o);
} // 扩展运算符调用接口
console.log(...l); // 手动调用。
// 获取接口对象
let iter = l[Symbol.iterator]();
// 调用next 方法
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
源码下载:https://pan.baidu.com/s/1sASqhXzIC94ae-SYYv0CAg
我的百度经验:https://jingyan.baidu.com/article/b7001fe1c5a1240e7282dd8b.html
为链表数据结构实现iterator接口的更多相关文章
- Iterator接口(遍历器)和for/of循环
在javascript中表示“集合”的数据结构,主要有Array,Object,Map,Set. Iterator(遍历器)接口是为各种不同的数据结构提供了统一的访问机制.任何数据结构具有Iterat ...
- JAVA笔记17-容器之一 图、Collection接口、Iterator接口(重要)
掌握1136: (1)1个图 (2)1个类:Collections (3)3个知识点:For(了解),Generic泛型,Auto-boxing/unboxing(自动打包/解包) (4)6个接口:C ...
- < java.util >-- Iterator接口
每一个集合都有自己的数据结构,都有特定的取出自己内部元素的方式.为了便于操作所有的容器,取出元素.将容器内部的取出方式按照一个统一的规则向外提供,这个规则就是Iterator接口. 也就说,只要通过该 ...
- Java API ——Collection集合类 & Iterator接口
对象数组举例: 学生类: package itcast01; /** * Created by gao on 15-12-9. */ public class Student { private St ...
- Iterator接口(迭代器)
目录 前言 原理 方法 异常 Iterator接口(迭代器) 前言 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象, ...
- Java容器深入浅出之Collection与Iterator接口
Java中用于保存对象的容器,除了数组,就是Collection和Map接口下的容器实现类了,包括用于迭代容器中对象的Iterator接口,构成了Java数据结构主体的集合体系.其中包括: 1. Co ...
- Java中的Enumeration、Iterable和Iterator接口详解
前言 在看各类Java书籍或者博文的时候,总是会遇到Enumeration.Iterable和Iterator这三个接口,如果对这几个接口不是很明白的话,总会让自己看着看着就迷惑了,正好这周末,抽空把 ...
- java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式
集合 ArrayList 丑数: 能被3,5,7整除多次, ArrayList list 接口 | - ArrayList | - Linked ...
- Java集合【2】--iterator接口详解
目录 一.iterator接口介绍 二.为什么需要iterator接口 三.iterator接口相关接口 3.1 ListIterator 3.2 SpitIterator 3.2.1 SpitIte ...
随机推荐
- weexpack打包weex项目运行/打包记录
构建weex项目 安装weex-toolkit cnpm install -g weex-toolkit 初始化一个项目只需新建文件夹并在目录下执行 weex init 即可 安装依赖:cnpm in ...
- C#通过COM组件操作IE浏览器(二):使用IHTMLDocument3完成登录
第一章介绍了如何打开网站,这一章介绍一下使用IHTMLDocument3完成登录博客园,以下为代码: SHDocVw.InternetExplorer oBrowser = new SHDocVw.I ...
- git常用命令总结——你一定会用到的几个命令
git入门看廖雪峰大神的教程即可,通俗易懂: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b806 ...
- oo第二单元的自白
电梯第一次作业 第一次电梯较为简单,主要目的在于初步接触多线程,可以实现一些简单的操作. 在本次作业中,为了更好的了解多线程,我也阅读了一些代码,并据此仿写完成了第一次作业. 根据生产者和消费者的模式 ...
- JAVA面试题-数组字符串基础
1.大写的Integer和String是可变类还是不可变类?怎么定义不可变类?不可变.用final关键字,如public final class Integer extends Number 2.比较 ...
- python连接Greenplum数据库
配置greenplum客户端认证 配置pg_hba.conf cd /home/gpadmin/gpdbdata/master/gpseg- vim pg_hba.conf 增加 host all g ...
- 使用SAX解析xml文档
1.首先,在main方法中解析xml文档,具体代码如下: import org.w3c.dom.*; import javax.xml.parsers.DocumentBuilder; import ...
- jsp fmt页面显示value does not support runtime expressions
最近使用Struts2+Spring3+Mybatis3做一个项目,在用户修改页面显示生日, <fmt:formatDate value="${user.birthday}" ...
- 基础编程复习:输出n以内的所有素数
暴力遍历:对于1~n以内的每一数i 每一个i只需要考虑2~i开根号以内是否有可以让i整除的数,即(i%x==0)只要满足就不是素数 否则输出 #include<iostream> #inc ...
- linux命令-awk入门
最近经常查看nginx日志,有时候需要做一些统计分析,于是就想起了awk,学习了就顺便做一个记录. 目录 概述:简单介绍awk背景原理 基本用法:常用到的awk语法 内建变量 综合实例 概述 awk是 ...