2014-04-15 44 views

回答

8

這是O(1)

您可以通過觀察clojure.lang.PersistentSet保持在Java源代碼_count現場驗證這一點:

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

+0

感謝您指出我找對地方了!我現在可以看到'Counted'接口指出了count()的O(1)性能,並且PersistentSet實現了它。 '(instance?clojure.lang.Counted#{:a:b::c})=> true' –

+3

是的'計數'是一個有用的標記界面來檢查。雖然請注意它並不嚴格保證* O(1)的行爲 - 但您必須檢查實際的具體類實現以確保這一點。從理論上講,有人可能會用O(n^2)表現糟糕地執行'Counted'或者更糟.... – mikera