JavaScript 对象作为哈希?复杂度是否大于 O(1)?

标签 javascript performance

对于我最近写的一些算法,我认为散列会很好。我想我可能只使用对象中的成员变量作为键值对。我不确定这是否是最优的,因为我真的不知道幕后发生了什么。我还假设 V8 的处理方式与其他环境不同。不过,我确实认为查找成员变量会非常快(希望如此)?

综上所述,我想知道在 JavaScript 对象中写入、读取、创建和删除成员变量的运行时复杂度是否都是 O(1)。如果环境存在差异(v8 与其他),它们是什么?

最佳答案

是的,它们是哈希值。跨浏览器的实现是不同的。尽管有许多文章声称对象不是散列,但它们的行为非常像散列,因此可以这样使用。

我必须通过运行性能测试来证明这一点:

阅读这些测试的方法是,如果对象大小增长时 ops/sec 没有性能差异,那么这意味着对象是哈希值。哈希的定义特征是每个操作的复杂度都是 O(1),无论它与其他操作相比是快还是慢。

测试:
http://jsperf.com/objectsashashes/2 (100 个按键)
http://jsperf.com/objectsashashes/3 (10 万个 key )
http://jsperf.com/objectsashashes/ (100 万个 key )
http://jsperf.com/objects-as-hashes-300-mil (10m 键)

注意:每个浏览器在不同的操作中会更快/更慢。这似乎在版本之间和年复一年之间发生变化。

关于JavaScript 对象作为哈希?复杂度是否大于 O(1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241676/

相关文章:

javascript - 如何动态改变d3 map 上一个国家的颜色

javascript - React 组件 props 值问题

Javascript 性能,重新创建函数还是绑定(bind)呢?

c# - StackTrace 构造函数和获取方法名称对性能的影响

javascript - 设置 DOMElement 边界的最快方法是什么?

javascript - html中的可拖动元素

javascript - Javascript 中的多态性是什么?

c# - 调整 ASP.NET Gridview 列的大小超出其数据长度

performance - 如何在Jmeter中更改http请求名称

python - 如何使用 cdist 或 tensorflow 加速最近点比较?