什么情况下Object会比Map快

You, web development
Back

有一次在刷 leetcode 的时候碰到一个反直觉的事情。使用 Object 作为哈希表时,读取速度比使用 Map 快很多,而且存的越多快的越明显。当时只觉得是黑魔法。
后来机缘巧合,碰到一个人说在存整数型 keyObjectMap 快。这才恍然大悟。

大家应该都知道 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 值为 10000value ,我们肯定不会傻傻的从头遍历一遍,而是可以很简单的 在 obj 中所有的 key 中挑选几个,去确定值为 10000key 在哪个区间(这也是为什么在数据库会使用数字作为 id,这会更快! )。 而因为 Map 不是有序的,只能通过遍历去拿。速度自然也就不如 Object

总结

当使用整数型作为 key 时,ObjectMap 更快

© liaoliao666.