即,不可变但数据共享与有效的O(1)索引。
答案 0 :(得分:7)
Karl Krukow将clojure数据结构提取到standalone library,因此您可以在不将整个clojure引入项目的情况下使用它。还有pcollections具有TreePVector实现(具有对数时间查找)。
答案 1 :(得分:3)
几年前我为Java创建了一个持久数据结构库,可能符合这个要求:
https://github.com/mikera/mikera/tree/master/src/main/java/mikera/persistent
它们有点像Clojure数据结构,但有更多的Java风格:
RepeatList
重复出现相同的值)答案 2 :(得分:1)
请记住,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的易用性 - 但它肯定是可能的。
答案 3 :(得分:0)
这是Scala - > Java端口:https://github.com/andrewoma/dexx