中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

野生前端的數據結構基礎練習(6)——集合

發布時間:2020-07-07 20:37:51 來源:網絡 閱讀:347 作者:大史不說話 欄目:開發技術

野生前端的數據結構基礎練習(6)——集合

網上的相關教程非常多,基礎知識自行搜索即可。

習題主要選自Orelly出版的《數據結構與算法javascript描述》一書。

參考代碼可見:https://github.com/dashnowords/blogs/tree/master/Structure/Set

[TOC]

集合的基本知識

  • 定義:

    集合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記錄也會被自動清除。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屏山县| 临沂市| 甘南县| 法库县| 瑞安市| 上林县| 开封市| 安陆市| 济宁市| 边坝县| 马尔康县| 汕头市| 将乐县| 邳州市| 迁安市| 顺义区| 贞丰县| 滁州市| 潜山县| 申扎县| 巴林左旗| 剑川县| 西青区| 旺苍县| 贡山| 砀山县| 乐山市| 琼结县| 合作市| 阳泉市| 南郑县| 班戈县| 田林县| 天柱县| 嘉荫县| 昌邑市| 吉首市| 浦北县| 民县| 苍山县| 杭锦旗|