是否有Java版本的Clojure或Scala的持久不可变向量?

时间:2013-04-14 10:21:51

标签: java scala collections clojure immutability

即,不可变但数据共享与有效的O(1)索引。

4 个答案:

答案 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风格:

  • 充分利用泛型
  • 支持您期望的所有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