Notes
← All notes
·frontend·11 min

LeetCode Cycle 03+04:Map / Set / Hash Table 在面試題裡的取捨

接 Cycle 02 結尾的 Object vs Map——Cycle 03 跟 Cycle 04 合併講,因為 Map / Set 是 ES6 才有的、Hash Table 是底層原理,要一起講才完整。NaN 在 Set 裡只算一個、SameValueZero 是面試陷阱題。內部使用。

#leetcode#algorithm#map#set#hash-table#weakmap#samevaluezero#interview-prep#面試系列#private

Cycle 03 跟 Cycle 04 在 Notion 是分兩篇的:Cycle 03 講 Map / Set,Cycle 04 講 Hash Table。實作上我直接合併——因為 ES6 的 Map 跟 Set 本身就是 hash table 的高層封裝,把 collision 怎麼解、為什麼 size 是 O(1)、為什麼 NaN 在 Set 裡只算一個放在一起講,才不會在面試現場被追問時拆成三層斷掉。

這篇承接 Cycle 02 結尾留下的問題:什麼時候 {}、什麼時候 Map?以下展開。

Map vs Object 的六條差異

從 Cycle 02 已經摸過的兩條(key 型別、size 取得)展開,把面試會問的六條規格差異拉成一張表:

差異ObjectMap
key 型別只能 string / symbol任意值(含 object、function、NaN)
插入順序integer-like key 先排,其他依插入序嚴格依插入序[^1]
sizeObject.keys(o).length,O(n)map.size,spec 規範 O(1)[^1]
預設 key 撞名__proto__toString沒有
序列化原生 JSON.stringify不支援,要手動 [...map]
比對語義===SameValueZero(NaN 算同一個)[^1]