Java的不可变树映射?

Java的不可变树映射?,java,treemap,immutable.js,immutable-collections,Java,Treemap,Immutable.js,Immutable Collections,我正在寻找一个Java中不可变树映射的实现,它允许在共享相同部分的情况下进行写时复制样式的修改。因此,本质上,JavaScript的功能就是Java 如果有人碰巧不熟悉ImmutableJS的工作原理,我希望它在Java中是这样的: ImmutableTreeMap<String, String> map = new ImmutableTreeMap<>(); ImmutableTreeMap<String, String> map1 = map.put("h

我正在寻找一个Java中不可变树映射的实现,它允许在共享相同部分的情况下进行写时复制样式的修改。因此,本质上,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());
ImmutableTreeMap映射=新的ImmutableTreeMap();
ImmutableTreeMap map1=map.put(“你好”,“世界”);
ImmutableTreeMap map2=map1.put(“foo”、“bar”);
//底图应保持不变
assertEquals(0,map.size());
assertEquals(1,map1.size());
在上面的示例中,
map2
不会复制树中存储
hello->world
的部分,它会重新使用该部分


有这样的实现吗,或者我必须从头开始创建一个吗?

您正在寻找一个“持久”哈希映射,也称为“哈希数组映射trie”

应该注意,“树”与“trie”数据结构不是一回事


您会发现一些java HAMT,包括来自paguro、pcollections和javaslang项目的HAMT,或者您可以使用clojure或scala为jvm编译的规范HAMT?这几乎是一样的:
map=newhashmap();地图。放置(“你好”,“世界”);map1=新的HashMap(map);地图2.put(“foo”、“bar”)
是,除了
map1=newhashmap(map)
map
中创建数据的真实副本,这是我想要避免的
map1
应尽可能与
map
共享数据结构(因为它是不可变的)。您要查找的术语是持久映射实现。寻找那个会有帮助的。@LouisWasserman谢谢。在这种情况下,我从未听说过“持久性”这个词。对我来说,“持久化树”是基于磁盘的树,例如B树。多亏了你的提示,我才找到了这个库,它对我的目的很有用:真的。事实上,我最终自己实现了一个。这是一个非常有趣和有见地的练习。