Java 的不可变树图?

Immutable Tree Map for Java?

我正在 Java 中寻找不可变树图的实现,它允许通过共享相同部分进行写时复制样式修改。所以,本质上 ImmutableJS 对 JavaScript 的作用,只是对 Java.

如果有人碰巧不熟悉 ImmutableJS 的工作原理,这就是我希望它在 Java:

中的样子
ImmutableTreeMap<String, String> map = new ImmutableTreeMap<>();
ImmutableTreeMap<String, String> map1 = map.put("hello", "world");
ImmutableTreeMap<String, String> map2 = map1.put("foo", "bar");
// the base maps should still remain the same
assertEquals(0, map.size());
assertEquals(1, map1.size());

在上面的例子中,map2不会复制树中存储hello -> world的部分,它会重新使用那部分。

有没有这样的实现可用,还是我必须继续从头开始创建一个?

您正在寻找 'persistent' 哈希映射,也称为 'hash array mapped trie'。

请注意 'tree' 与 'trie' 数据结构不同。

您会发现一些 java HAMT,包括来自 paguro、pcollections 和 javaslang 项目的,或者您可以使用为 jvm[=10= 编译的 clojure 或 scala 中的规范的]