【发布时间】:2016-09-29 06:33:28
【问题描述】:
我在问自己这个问题。 Set 是 JavaScript 中的哈希集合吗?
例如,Set.prototype.has 将迭代整个Set,或者它的实现是否使用内部哈希表来定位集合中的项目?
【问题讨论】:
标签: javascript collections set ecmascript-6
我在问自己这个问题。 Set 是 JavaScript 中的哈希集合吗?
例如,Set.prototype.has 将迭代整个Set,或者它的实现是否使用内部哈希表来定位集合中的项目?
【问题讨论】:
标签: javascript collections set ecmascript-6
ECMAScript 2015 规范says:
必须使用哈希表或其他机制来实现集合对象,这些机制提供的访问时间平均而言与集合中的元素数量呈次线性关系。
显然他们不能强制一个特定的 JS 引擎真正做到这一点,但实际上 JS 引擎会做正确的事情。
【讨论】:
Set 可以是一个散列集合以在我们需要检查元素是否存在时在数组上使用它们非常有趣或其他常见操作
ES6 specification 不需要特定的实现,但它确实表明它应该比O(n) 更好(比线性查找更好)。而且,由于 Set 对象的目的是高效地查找 Set 中的项目,因此它肯定会使用某种高效的查找系统,例如哈希。
如果您想确定它是如何工作的,您必须查看 Firefox 或 Chrome 实现的开源代码。
您还可以对其进行基准测试以证明查找速度不是O(n),而是比这更有效的东西。
【讨论】: