也就是说,不可变但通过有效的 O(1) 索引共享数据。
4 回答
Karl Krukow 将 clojure 数据结构提取到独立库中,因此您可以使用它而无需将整个 clojure 带到您的项目中。还有pcollections具有TreePVector实现(具有对数时间查找)。
几年前,我为 Java 制作了一个持久数据结构库,可能符合要求:
https://github.com/mikera/mikera/tree/master/src/main/java/mikera/persistent
它们有点像 Clojure 数据结构,但更多的是 Java 风格:
- 充分利用泛型
- 支持您期望的所有 Java 集合接口
- 包括一些方便的特殊类型(例如
RepeatList
重复出现相同的值)
请记住,Clojure 最终只是 Java。因此,您可以将 Clojure 的 jar 放在您的类路径中并使用它的类。
例如,Clojure 向量是 的实例clojure.lang.PersistentVector
,映射是clojure.lang.PersistentArrayMap
和列表的实例,是 的实例clojure.lang.PersistentList
。
我自己并没有在愤怒中尝试过这个,但如果我想在 Java 中使用持久性数据结构,这可能是我会采取的路线。
这样的事情可以让你开始:
import clojure.lang.PersistentVector;
...
ArrayList list = ...
PersistentVector myVector = PersistentVector.create(list);
// from here on, using myVector takes advantages of its persistent nature.
显然,这些类是在考虑 Clojure 的 API 的情况下构建的,而不是 Java 的易用性——但这当然是可能的。
这是一个 Scala -> Java 端口:https ://github.com/andrewoma/dexx