这与另一个问题非常相似 (Java中的函数式数据结构),但那里的答案并不特别有用。
我需要使用标准Java集合的不可变版本(例如HashMap / TreeMap / ArrayList / LinkedList / HashSet / TreeSet)。 通过“不可变”,我指的是函数式意义上的不可变(例如,纯函数数据结构),在该数据结构上更新操作不会更改原始数据,而是返回同一种数据结构的新实例。通常,数据结构的新旧实例将共享不可变数据以在时间和空间上高效利用。
从我所知道的情况来看,我的选择包括:
但我不确定这些是否特别适合我。 我有一些要求/期望:
相关集合应该可以直接在Java中使用(使用类路径中的适当库)。FJ对我有用;我不确定是否可以在Java中使用Scala或Clojure数据结构而无需使用这些语言的编译器/解释器和编写Scala或Clojure代码。
在不创建具有令人困惑的语法的函数对象的情况下,应该可以执行列表/映射/集合的核心操作(FJ看起来有点靠不住)
它们应该在时间和空间上都很高效。我正在寻找一个最好进行了一些性能测试的库。FJ的TreeMap是基于红黑树的,不确定它的评级如何。
文档/教程应该足够好,以便某人可以快速开始使用这些数据结构。 FJ 在这方面做得不够好。
有什么建议吗?