Это очень похоже на другой вопрос (Структуры функциональных данных в Java), но ответы там не особенно полезны.
Мне нужно использовать неизменные версии стандартных наборов Java (например, HashMap/TreeMap/ArrayList/LinkedList/HashSet/TreeSet). Под "неизменяемым" я подразумеваю неизменяемость в функциональном смысле (например, чисто функциональные структуры данных), где операции обновления в структуре данных не изменяют исходные данные, но вместо этого верните новый экземпляр того же типа структуры данных. Также типично новые и старые экземпляры структуры данных будут совместно использовать неизменяемые данные, чтобы быть эффективными во времени и пространстве.
Из того, что я могу сказать, мои варианты включают:
но я не уверен, что это особенно привлекательно для меня. У меня есть несколько требований/желаний:
-
рассматриваемые коллекции должны использоваться непосредственно в Java (с соответствующими библиотеками в пути к классам). FJ будет работать для меня; Я не уверен, могу ли я использовать структуры данных Scala или Clojure в Java без использования компиляторов/интерпретаторов с этих языков и без необходимости писать код Scala или Clojure.
-
Основные операции над списками/картами/наборами должны быть возможны без необходимости создавать функциональные объекты с запутанными синтаксисами (FJ выглядит слегка iffy)
-
Они должны быть эффективными во времени и пространстве. Я ищу библиотеку, которая идеально провела тестирование производительности. FJ TreeMap основан на красно-черном дереве, не уверен, как это оценивается.
-
Документация/учебники должны быть достаточно хорошими, чтобы кто-то мог быстро начать работу с структурами данных. FJ не работает на этом фронте.
Любые предложения?