为链表数据结构实现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 ...
随机推荐
- 为什么使用 Spring Boot?
Spring 是一个非常流行的基于Java语言的开发框架,此框架用来构建web和企业应用程序.与许多其他仅关注一个领域的框架不同,Spring框架提供了广泛的功能,通过其组合项目满足现代业务需求. S ...
- Android 代码混淆配置总结
一.前言 为何需要混淆呢?简单的说,就是将原本正常的项目文件,对其类,方法,字段,重新命名,a,b,c,d,e,f…之类的字母,达到混淆代码的目的,这样反编译出来,结构乱糟糟的,看了也头大. 另外说明 ...
- .net core 发布linux报错“The configured user limit (128) on the number of inotify instances has been reached”
https://stackoverflow.com/questions/45875981/error-while-reading-json-file-in-dotnet-core-the-config ...
- 几个实用的CSS代码段总结
废话不多说,直接上代码,希望能帮到有需要的小伙伴 ①:遮罩 position: fixed; background: rgba(0, 0, 0, .4); top: 0; left: 0; right ...
- JavaScript 对象(下)
getter 和 setter: 1.ES5 里,属性值可以用一个或两个方法代替,这两个方法就是 getter 和 setter,它们使用 get 和 set 进行定义而不是通过 function 2 ...
- 什么 是JavaScript中的字符串类型之间的转换问题详解? 部分4
字符串类型 单双引号都可以!建议使用单引号!(本人建议:个人觉得单个字符串更利于网页优化@特别地方特别处理!); 判断字符串的长度获取方式:变量名.length html中转义符: < < ...
- okHttp超时报错解决方案
Android 使用okhttp,如果客户端等待的时间超过了okHttp的默认时间,就会报错java.net.SocketTimeoutException: timeout 所以,需要在调用okHtt ...
- python搭建web服务
import json from urlparse import parse_qs from wsgiref.simple_server import make_server import os im ...
- Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验
Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...
- Java后端工程师必备书单(含大后端方向相关书籍)
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. 一: ...