自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

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

  • Set: 查找操作(has())在Set中通常是O(1),即常數(shù)時間復(fù)雜度。這是因為Set是基于哈希表實現(xiàn)的,它能夠快速判斷元素是否已經(jīng)存在,當(dāng)你需要頻繁檢查某個元素是否存在時,Set提供了更優(yōu)的性能
  • Array: 查找操作(includes())在Array中是O(n),即線性時間復(fù)雜度,因為 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)在我們來進行大數(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 機器學(xué)習(xí)

2015-11-05 09:26:34

Fedora發(fā)行版Linux

2014-12-05 09:49:18

2022-05-06 08:00:00

APIBallerina編程語言

2024-08-05 01:22:16

2017-03-02 14:52:46

2022-09-13 07:31:50

工具代碼Lombok

2022-07-06 09:29:40

JMH性能測試

2023-05-28 13:03:46

BeegoGin設(shè)計

2019-07-27 09:40:56

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

2020-12-09 18:36:28

ObjectArrayJavaSc

2023-01-18 08:25:23

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

2021-03-15 09:00:00

開發(fā)JavaKotlin

2021-03-04 09:11:57

日志開發(fā)打印

2020-06-08 11:30:04

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

2020-10-28 09:32:01

Javareturnfinally

2024-11-19 08:10:00

點贊
收藏

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