Я искал тонкий, "дружественный" Java постоянный фреймворк и взял TotallyLazy и PCollections , упомянутые в этой теме, для тест-драйва, потому что они звучали для меня наиболее многообещающе.
Оба предоставляют разумные простые интерфейсы для управления постоянными списками:
// TotallyLazy
PersistentList<String> original = PersistentList.constructors.empty(String.class);
PersistentList<String> modified = original.append("Mars").append("Raider").delete("Raider");
// PCollections
PVector<String> original = TreePVector.<String>empty();
PVector<String> modified = original.plus("Mars").plus("Raider").minus("Raider");
Оба PersistentList
и PVector
расширяют java.util.List
, поэтому обе библиотеки должны хорошо интегрироваться в существующую среду.
Оказывается, однако, что TotallyLazy сталкивается с проблемами с производительностью при работе с большими списками (как уже упоминалось в комментарии выше @levantpied). На моем MacBook Pro (конец 2013 г.) для вставки 100 000 элементов и возврата неизменяемого списка потребовалось TotallyLazy ~ 2000 мс, тогда как PCollections завершил работу в течение ~ 120 мс.
Мои (простые) тестовые случаи доступны на Bitbucket , если кто-то хочет взглянуть более тщательно.