偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Set.has 和 Array.includes 到底應(yīng)該用哪個?

開發(fā) 前端
查找操作(includes())在Array中是O(n),即線性時間復(fù)雜度,因?yàn)?JavaScript 中的數(shù)組是基于索引的線性結(jié)構(gòu)。數(shù)組需要遍歷每個元素,直到找到目標(biāo)元素,如果你頻繁需要檢查元素是否存在,Array在性能上可能不如Set。

我們平時在 JavaScript 的開發(fā)中,我們會遇到一些需求:檢測集合中是否包含了某一個元素,我們會使用兩種方式:

  • Set.prototype.has()
  • Array.prototype.includes()

對于這兩種方式,其實(shí)都能完成我們的需求,但是其實(shí)這兩種方式是有差異的,那就是性能差異

接下來我們可以先來看看 Set 和 Array 在查找元素的時候,方式到底有哪些區(qū)別

  • Set: 查找操作(has())在Set中通常是O(1),即常數(shù)時間復(fù)雜度。這是因?yàn)镾et是基于哈希表實(shí)現(xiàn)的,它能夠快速判斷元素是否已經(jīng)存在,當(dāng)你需要頻繁檢查某個元素是否存在時,Set提供了更優(yōu)的性能
  • Array: 查找操作(includes())在Array中是O(n),即線性時間復(fù)雜度,因?yàn)?JavaScript 中的數(shù)組是基于索引的線性結(jié)構(gòu)。數(shù)組需要遍歷每個元素,直到找到目標(biāo)元素,如果你頻繁需要檢查元素是否存在,Array在性能上可能不如Set

小數(shù)據(jù)場景

如果我們的集合比較小的時候,使用 Set.prototype.has() 或 Array.prototype.includes() 會有什么性能上的差異呢?我們可以來測一測

圖片圖片

我們將這兩個代碼放到測試平臺上測:https://bestcodes.dev/projects/codeperf

可以發(fā)現(xiàn),當(dāng)集合數(shù)據(jù)量比較小的時候,沒有什么明顯的數(shù)據(jù)差異,但是可以看出 Set.prototype.has() 的性能領(lǐng)先了一丟丟

圖片圖片

大數(shù)據(jù)場景

現(xiàn)在我們來進(jìn)行大數(shù)據(jù)的場景,就把數(shù)據(jù)量加大到 1000000 個元素

圖片圖片

可以看出 Set.prototype.has() 性能更好

圖片圖片

責(zé)任編輯:武曉燕 來源: 前端之神
相關(guān)推薦

2024-07-10 10:54:44

2023-11-24 08:17:38

金額類型存儲

2018-07-10 16:05:05

2021-07-01 16:45:17

PyTorchTensorflow 機(jī)器學(xué)習(xí)

2015-11-05 09:26:34

Fedora發(fā)行版Linux

2024-08-05 01:22:16

2014-12-05 09:49:18

2022-05-06 08:00:00

APIBallerina編程語言

2022-09-13 07:31:50

工具代碼Lombok

2017-03-02 14:52:46

2022-07-06 09:29:40

JMH性能測試

2019-07-27 09:40:56

MySQLPG數(shù)據(jù)庫

2023-05-28 13:03:46

BeegoGin設(shè)計(jì)

2021-03-04 09:11:57

日志開發(fā)打印

2023-01-18 08:25:23

數(shù)據(jù)庫存儲類型

2021-03-15 09:00:00

開發(fā)JavaKotlin

2010-06-13 09:31:45

WindowsLinux服務(wù)器操作系統(tǒng)

2020-11-18 09:48:09

Synchronize多線程Java

2020-12-09 18:36:28

ObjectArrayJavaSc

2024-11-19 08:10:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號