什么是在java中使用的好的持久集合框架?

通过持久性收藏,我指的是像clojure这样的收藏品。

例如,我有一个包含元素(a,b,c)的列表。对于普通列表,如果我添加 d,我的原始列表将具有 (a,b,c,d) 作为其元素。对于持久性列表,当我调用list.add(d)时,我会得到一个新列表,持有(a,b,c,d)。但是,该实现会尽可能在列表之间共享元素,因此它比简单地返回原始列表的副本更节省内存。它还具有不可变的优点(如果我持有对原始列表的引用,那么它将始终返回原始的3个元素)。

这在其他地方(例如 http://en.wikipedia.org/wiki/Persistent_data_structure)的解释要好得多。

无论如何,我的问题是...在Java中提供此功能的最佳库是什么?我可以以某种方式使用clojure集合吗(除了直接使用clojure)?


答案 1

只需直接使用Clojure中的那些。虽然显然你可能不想使用它自己的语言,但你仍然可以直接使用持久集合,因为它们都只是Java类。

import clojure.lang.PersistentHashMap;
import clojure.lang.IPersistentMap;

IPersistentMap map = PersistentHashMap.create("key1", "value1");

assert map.get("key1").equals("value1");
IPersistentMap map2 = map.assoc("key1", "value1");

assert map2 != map;
assert map2.get("key1").equals("value1");

(免责声明:我实际上还没有编译该代码:)

缺点是集合不是类型化的,即它们没有泛型。


答案 2

那抽奖呢

您还可以查看Clojure的持久集合实现(例如PersistentHashMap)。