为链表数据结构实现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 ...
随机推荐
- Javascript高级编程学习笔记(73)—— 表单(1)表单基础
表单 JS最初的一个用途就是帮助服务器分担处理表单的责任 时至今日,虽然web应用以及JS都有了长足的发展,但是表单依然是现在web应用中比较重要的部分. 因为默认的表单控件很丑,所以有时候我们会使用 ...
- vue局部组件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 吴恩达机器学习笔记27-样本和直观理解2(Examples and Intuitions II)
二元逻辑运算符(BINARY LOGICAL OPERATORS)当输入特征为布尔值(0 或1)时,我们可以用一个单一的激活层可以作为二元逻辑运算符,为了表示不同的运算符,我们只需要选择不同的权重即可 ...
- OAuth2简易实战(一)-四种模式
1. OAuth2简易实战(一)-四种模式 1.1. 授权码授权模式(Authorization code Grant) 1.1.1. 流程图 1.1.2. 授权服务器配置 配置授权服务器中 clie ...
- Connect By
connect by 用于存在父子,祖孙,上下级等层级关系的数据表进行层级查询. 语法格式: { CONNECT BY [ NOCYCLE ] condition [AND condition]... ...
- Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )
调用系统命令 import os #调用系统命令,输出只能输出到屏幕上,不能用变量接收 os.system("ipconfig") #调用系统命令,并把执行结果存到变量中 res= ...
- 使用异步任务降低API延迟_实践总结
之前在想如何降低API的延迟,这些API里有几个比较耗时的操作且是串行执行,那通过异步执行的方式理论上可以降低运行的时间,如下图所示: 具体的实现比较简单,例如这样: public class Par ...
- JVM学习(一)、垃圾收集器简介
一.垃圾收集算法 (1)标记-清除算法:最基础的收集算法“标记--清除”(Mark-sweep)算法,算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的 ...
- 纸上谈兵: AVL树[转]
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 二叉搜索树的深度与搜索效率 我们在树, 二叉树, 二叉搜索树中提到,一个有n个节点 ...
- windows关闭占用某端口的进程
第一步:获取该端口进程PID 第二步:获取该PID进程映像名称 第三部:关闭进程