什么情况下Object会比Map快
有一次在刷 leetcode 的时候碰到一个反直觉的事情。使用 Object
作为哈希表时,读取速度比使用 Map
快很多,而且存的越多快的越明显。当时只觉得是黑魔法。
后来机缘巧合,碰到一个人说在存整数型 key
时 Object
比 Map
快。这才恍然大悟。
大家应该都知道 Object
类型在存整数 key
时是会自动排序的,它是无法保证 key
的顺序的。但是 Map
却是会保证 key
的存储顺序
可以看下面例子
const obj = {}
obj[1] = 1
obj[3] = 3
obj[2] = 2
console.log(Object.keys(obj)) // ['1', '2', '3']
const map = new Map()
map.set(1, 1)
map.set(3, 3)
map.set(2, 2)
console.log(map.keys()) // MapIterator {1, 3, 2}
如果我们知道 key
是有序的,那么我们就很容易知道在哪个区间里去找到这个 key
。例如我们取 key
值为 10000
的 value
,我们肯定不会傻傻的从头遍历一遍,而是可以很简单的 在 obj
中所有的 key
中挑选几个,去确定值为 10000
的 key
在哪个区间(这也是为什么在数据库会使用数字作为 id,这会更快! )。
而因为 Map
不是有序的,只能通过遍历去拿。速度自然也就不如 Object
总结
当使用整数型作为 key
时,Object
比 Map
更快