我在问自己这个问题。 是Set
在JavaScript中哈希集合?在JavaScript中设置哈希集合?
例如,Set.prototype.has
将迭代整个Set
或其实现使用内部哈希表来定位集合中的项目?
我在问自己这个问题。 是Set
在JavaScript中哈希集合?在JavaScript中设置哈希集合?
例如,Set.prototype.has
将迭代整个Set
或其实现使用内部哈希表来定位集合中的项目?
ECMAScript的2015规范says在于:
集对象都必须用哈希表或其它机制,平均而言,提供可对集合中的元素的数量次线性访问时间来实现。
显然他们不能力特定的JS引擎真正做到这一点,但在实践中JS引擎会做正确的事。
ES6 specification不需要特定的实现,但它确实表明它应该比O(n)
更好(比线性查找好得多)。而且,由于Set
对象的目的是查找Set中的项目,因此它肯定会使用某种有效的查找系统,如哈希。
如果您想知道它是如何工作的,那么您必须查看Firefox或Chrome实施的开源代码。
你也可以通过基准来证明查询速度不是O(n)
,而是比这更有效。
感谢您的努力!我相信这很容易,但是值得与社区共同分享这个问题,因为知道'Set'可以是一个散列集合,当我们需要检查一个元素是否存在或其他常见操作 –