Это очень похоже на другой вопрос (Functional Data Structures in Java), но ответы там не особенно полезны.java: библиотеки для неизменяемых структур данных функционального стиля
Мне нужно использовать неизменные версии стандартных наборов Java (например, HashMap/TreeMap/ArrayList/LinkedList/HashSet/TreeSet). Под «неизменяемым» я подразумеваю неизменяемость в функциональном смысле (например, purely functional data structures), где операции обновления структуры данных не изменяют исходные данные, а вместо этого возвращают новый экземпляр такой же структуры данных. Также типично новые и старые экземпляры структуры данных будут делиться неизменными данными, чтобы быть эффективными во времени и пространстве.
Из того, что я могу сказать, мои варианты включают в себя:
, но я не уверен, является ли какой-либо из них особенно привлекательным для меня. У меня есть несколько требований/desirements:
коллекция в вопросе должна быть доступна непосредственно в Java (с соответствующими библиотеками в пути к классам). FJ будет работать для меня; Я не уверен, могу ли я использовать структуры данных Scala или Clojure в Java без использования компиляторов/интерпретаторов с этих языков и без необходимости писать Scala или Clojure.
Основные операции по спискам/карт/наборов должно быть возможным без необходимости создания функциональных объектов с запутанным синтаксисах (FJ выглядит немного ненадежный)
Они должны быть эффективными во времени и пространстве. Я ищу библиотеку, которая идеально провела тестирование производительности. FJ's TreeMap основан на красно-черном дереве, не уверен, как это оценивается.
Документация/учебники должны быть достаточно хорошими, чтобы кто-то мог быстро начать работу с структурами данных. FJ не работает на этом фронте.
Любые предложения?
Существует также https://github.com/blackdrag/pcollections –