标签: data-structures vector clojure
Clojure使用什么数据结构来实现其矢量类型?
我问,因为他们有一些有趣的复杂属性。索引它们很便宜(O(log32(N))),你可以得到一个新副本,任何项目都可以便宜地更改。
O(log32(N))
这会让我认为它是基于(非常宽的)树,但这无法解释为什么添加到一端而不是另一端便宜。您也不能在向量中间廉价地插入或删除元素。
答案 0 :(得分:4)
是的,它们是宽阔的树木。 http://blog.higher-order.net/2009/02/01/understanding-clojures-persistentvector-implementation.html和http://hypirion.com/musings/understanding-persistent-vector-pt-1是两篇文章系列,更详细地介绍了它们的工作原理。