"HashSet::len"的计算复杂度是多少?

What's the computational complexity of "HashSet::len"?

文档说 getinsert 对于 HashMap(不是 HashSet)是 Ω(1)-like,但对于 HashSet 不是或 len.

HashSet::len的计算复杂度是多少?

通常,len 的计算复杂度为 Ο(1)。是否有说明这一点的声明?

https://doc.rust-lang.org/stable/std/collections/index.html#maps

为了这个不得不走入一个兔子洞。简而言之,阅读 std::collections::HashMap 的源代码表明标准 HashMap 从板条箱 hashbrown 继承了它的 len() 功能,它是 Google HashTable 变体的 Rust 端口, SwissTable(github)。追踪此 crate 中 len() 的实现会导致底层 class、RawTable,其中包含 RawTableInner<A> 的实例,条目类型 A 通用].该结构包含一个名为 items : usize 的插槽,每当调用 len() 时,它都会被 returned。这表明 len() 函数只是 return 一个内部存储的整数计数的值,它跟踪条目的数量。

总的来说,这表明 len() 的时间复杂度将为 O(1),因为它没有进行任何迭代或计数,而只是 return 条目的值在 HashTable 的构建过程中一直维护的计数器。