Clojure集上`count`的性能如何?

Dan*_*eal 6 clojure

所以,我读到Clojure向量,列表和映射的count操作是O(1).

(count [1 2 3]) ;=> 3
Run Code Online (Sandbox Code Playgroud)

但对于Clojure集来说它也是O(1)吗?我想它可能是,但我不确定如何找出答案.我快速阅读了http://clojure.org/data_structures#Data%20Structures-Sets,但看不到那里的信息.

mik*_*era 9

它是 O(1)

您可以通过观察在Java源代码中clojure.lang.PersistentSet维护一个_count字段来验证这一点:

https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentList.java

  • 是`Counted`是一个有用的标记界面来检查.虽然注意它并不严格*保证*O(1)行为 - 你必须检查实际的具体类实现以确保这一点.从理论上讲,有人可以用O(n ^ 2)性能或者更糟糕的方式实现"计数". (3认同)