野生前端的数据结构基础练习(6)——集合
2018-11-07 22:05
886 查看
目录
网上的相关教程非常多,基础知识自行搜索即可。
习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。
参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/Set
集合的基本知识
定义:
集合
Set
是一种不包含不同元素的数据结构,主要特性包括无序性和单一性,即集合中的成员是无序的,同时也是不重复的。
基本练习
实现一个自定义的
cSet类(避免与原生的
Set类冲突),包含以下方法:
dataStore-类属性,用于存储集合中的成员,用数组实现即可。
add(value)- 向集合中加入成员。
remove(value)- 从集合中移除成员。
union(cSetInstance)- 求并集
intersect(cSetInstance)求交集
difference(cSetInstance)求差集
show( )-显示集合成员
课后习题(书中第九节习题)
1.修改
Set类,使得里面的元素按顺序存储,并写一段代码测试该修改。
2.修改
Set类,将存储方式从数组替换为链表,并写一段代码测试该修改。
3.为
Set类增加一个
higher(element)方法,该方法返回比传入元素大的元素中最小的一个,并写一段代码来测试该功能。
4.为
Set类增加一个
lower(element)方法,该方法返回比传入元素小的元素中最大的一个,并写一段代码来测试该功能。
习题思路
1.
add(value)方法中检测完重复性后,使用插入排序算法和
splice(i,0,value)方法将成员直接插入正确位置。
2.将前述章节中实现的
List.js类引入,使用一个新的类继承
Set类并复写其构造函数及相关方法即可。
3.习题1中已经实现了插入排序,
higher(element)只需要在
Set中找到element应该插入的位置,该位置后一个元素即满足查找条件。
4.思路同上,不再赘述。
ES6新特性
阮一峰的ES6教程:http://es6.ruanyifeng.com/#docs/set-map
ES6中原生实现了
Set,
Map,
WeakSet,
WeakMap跟集合相关的类型,和数据结构中的集合不完全一致,数据结构中的集合主要是一种数学概念的表现,而
ES6中的集合拥有一些针对特定问题的开发相关的特性。
1.数组去重
借助集合可以实现js中最简洁的数组去重方式:
//实现了Iterable接口的数据结构都可以作为初始化Set的参数 cosnt uniqueArr = [...new Set(arr)];
2.集合遍历
keys(),
values(),
entries()方法分别返回不同类型的遍历器,可供
for...of循环结构消费。
3.数学特性
原生
Set类并没有定义集合的数学运算操作方法,因为可以很方便的直接实现:
//并集 let union = new Set([...a,...b]); //交集 let intersect = new Set([...a].filter(x=>b.has(a))); //差集 let difference = new Set([...a].filter(x=>!b.has(a)));
4.
WeakSet
WeakSet的成员变量只能是对象,被放入其中的对象都是弱引用,在其他引用都解除后,垃圾回收机制不会考虑
WeakSet对该对象的持有。上面的教程中提到
WeakMap的主要用途是用于DOM节点的存储,防止DOM节点移除后造成内存泄漏。基础知识可以参考这篇博文《Javascript中4种常见的内存泄漏陷阱》。
5.
WeakMap
WeakMap的设计目的,在于当在某个DOM对象上存放一些数据时,会形成对这个对象的引用,影响垃圾回收机制,典型应用场景是在DOM元素上添加数据,当DOM元素被清除时,对应的
WeakMap记录也会被自动清除。
相关文章推荐
- 野生前端的数据结构基础练习(5)——散列
- 野生前端的数据结构基础练习(1)——栈
- 野生前端的数据结构基础练习(2)——队列
- 野生前端的数据结构基础练习(3)——链表
- 野生前端的数据结构基础练习(4)——字典
- Java基础集合之TreeSet练习(带答案)
- 初学者入门web前端 C#基础知识:数组与集合
- 前端基础---jquery练习
- Java基础知识强化之集合框架笔记34:List练习之集合的嵌套遍历
- Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序)
- web前端基础小白练习效果,边框线条特效
- Java基础知识强化之集合框架笔记20:数据结构之 栈 和 队列
- 数据结构练习-我的集合我做主
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序)
- [Web前端技术教学]CSS多个图层透明处理的基础练习
- android基础篇------------java基础(9)(集合的综合练习)
- 前端学数据结构之集合
- Java基础知识强化之IO流笔记45:IO流练习之 把集合中的数据存储到文本文件案例
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素
- C#基础-C#数据结构,集合