6

也就是说,不可变但通过有效的 O(1) 索引共享数据。

4

4 回答 4

8

Karl Krukow 将 clojure 数据结构提取到独立库中,因此您可以使用它而无需将整个 clojure 带到您的项目中。还有pcollections具有TreePVector实现(具有对数时间查找)。

于 2013-04-14T10:35:43.453 回答
3

几年前,我为 Java 制作了一个持久数据结构库,可能符合要求:

https://github.com/mikera/mikera/tree/master/src/main/java/mikera/persistent

它们有点像 Clojure 数据结构,但更多的是 Java 风格:

  • 充分利用泛型
  • 支持您期望的所有 Java 集合接口
  • 包括一些方便的特殊类型(例如RepeatList重复出现相同的值)
于 2013-04-14T13:09:13.443 回答
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 的易用性——但这当然是可能的。

于 2013-04-14T10:30:41.930 回答
0

这是一个 Scala -> Java 端口:https ://github.com/andrewoma/dexx

于 2015-10-14T09:45:38.513 回答