Open
Description
More than Persistent Collections ❤️
Contain persistent(immutable) collections/Functional Data Structures
📌
vavr
❤️, VΛVΓ (Vavr, formerly called Javaslang) is a non-commercial, non-profit object-functional library that runs with Java 8+. It aims to reduce the lines of code and increase code quality.
- homepage: http://vavr.io/
- documentation: http://docs.vavr.io/
- code repo: https://github.com/vavr-io/vavr
- has simple
Kotlin
integration 🍩: https://github.com/vavr-io/vavr-kotlin
- homepage: http://vavr.io/
cyclops
❤️, An advanced, but easy to use, platform for writing functional applications in Java 8.
- homepage: http://cyclops-react.io/
- code repo: https://github.com/aol/cyclops-react
- excellent ecosystem integration, see the cyclops integration modules
- related/similar lib integration:
RxJava
,Reactor
,guava
,vavr
,functionaljava
...
- related/similar lib integration:
Functional Java
, Functional programming in Java
procrastination
, A small, straightforward library bringing the benefits of functional programming to Java 11
- code repo: https://github.com/gdejohn/procrastination
- sophisticated
FP
Languages ❤️ have built-in Persistent Collections support 📌Scala
❤️, Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.
- homepage: http://scala-lang.org/
- code repo: https://github.com/scala/scala
Clojure
❤️, Clojure is a dynamic, general-purpose programming language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming. Clojure is a compiled language, yet remains completely dynamic – every feature supported by Clojure is supported at runtime. Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection.
- homepage: https://clojure.org
- code repo: https://github.com/clojure/clojure
Persistent(immutable) Collections/Functional Data Structures 📌
PCollections
, A Persistent Java Collections Library
- code repo: https://github.com/hrldcpr/pcollections
Capsule
, aims to become a full-fledged (immutable) collections library for Java 8+ that is solely built around persistent tries.
- code repo: https://github.com/usethesource/capsule
dexx
, Dexx Collections are a port of
Scala
's immutable, persistent collection classes to pure Java.- code repo: https://github.com/andrewoma/dexx
- has
Kotlin
integration 🍩
Paguro
, Type-safe versions of
Clojure
's immutable/persistent collections- code repo: https://github.com/GlenKPeterson/Paguro
java-immutable-collections
Efficient Immutable/Persistent Collections for Java
Primitive Collections/Type-specific Collections 💎
fastutil
❤️, fastutil extends the Java™ Collections Framework by providing type-specific maps, sets, lists and queues with a small memory footprint and fast access and insertion; provides also big (64-bit) arrays, sets and lists, and fast, practical I/O classes for binary and text files.
- homepage: http://fastutil.di.unimi.it/
- code repo: https://github.com/vigna/fastutil
eclipse-collections
, Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.
eclipse-collections
is more than a primitive collection lib- code repo: https://github.com/eclipse/eclipse-collections
- home page: https://www.eclipse.org/collections/
trove4j
, High performance collections for Java
hppc
, HPPC provides template-generated implementations of typical collections, such as lists, sets and maps, for all Java primitive types. The primary driving force behind HPPC is optimization for highest performance and memory efficiency.
- homepage: http://labs.carrotsearch.com/hppc.html
- code repo: https://github.com/carrotsearch/hppc
High Performance/Sophisticated Collection(-ish) 🚄
JCTools
❤️, offer some concurrent data structures currently missing from the JDK. JCTools offers excellent performance. It's stable and in use by such distinguished frameworks as Netty, RxJava and others.
- code repo: https://github.com/JCTools/JCTools
disruptor
❤️, A High Performance Inter-Thread Messaging Library. Achieve very low-latency and high-throughput with our Java platform. Performance testing showed that using queues to pass data between stages of the system was introducing latency, so we focused on optimising this area.
- home page: http://lmax-exchange.github.io/disruptor/
- code repo: https://github.com/LMAX-Exchange/disruptor
High Scale Lib
❤️, Cliff Click's high scale lib.
- code repo: https://github.com/boundary/high-scale-lib
caffeine
❤️, Caffeine is a high performance, near optimal caching library based on Java 8. For more details, see our user's guide and browse the API docs for the latest release.
- Caffeine is the Java 8 successor to ConcurrentLinkedHashMap and Guava's cache. Projects should prefer Caffeine and migrate when requiring JDK8 or higher. The previous caching projects are supported in maintenance mode.
- code repo: https://github.com/ben-manes/caffeine
- home page: https://commons.apache.org/proper/commons-collections/
concurrentlinkedhashmap
, A high performance version of java.util.LinkedHashMap for use as a software cache.
- Caffeine is the Java 8 successor to ConcurrentLinkedHashMap and Guava's cache. Projects should prefer Caffeine and migrate when requiring JDK8 or higher. The previous caching projects are supported in maintenance mode.
- code repo: https://github.com/ben-manes/concurrentlinkedhashmap
Collections Backed by Storage 🗃
mapdb
❤️, MapDB provides Java Maps, Sets, Lists, Queues and other collections backed by off-heap or on-disk storage. It is a hybrid between java collection framework and embedded database engine.
- code repo: https://github.com/jankotek/mapdb
- home page: http://www.mapdb.org/
Collections with Distribution 🌏
Chronicle Map
❤️, Chronicle Map is a super-fast, in-memory, non-blocking, key-value store, designed for low-latency, and/or multi-process applications such as trading and financial market applications.
- home page: http://chronicle.software/products/chronicle-map/
- Replicate your Key Value Store across your network, with consistency, persistance and performance.
- code repo: https://github.com/OpenHFT/Chronicle-Map
- home page: http://chronicle.software/products/chronicle-map/
Chronicle Queue
❤️, Chronicle Queue is a Java project focused on building a persisted low-latency messaging framework for high performance and critical applications.
- home page: http://chronicle.software/products/chronicle-queue/
- Store complete history of all your messages to disk. With Chronicle Queue you are able to persist every single event and message, It records each event to a memory mapped file.
- code repo: https://github.com/OpenHFT/Chronicle-Queue
- home page: http://chronicle.software/products/chronicle-queue/
Contain Collections, but NOT Persistent 😱
eclipse-collections
, Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.
- code repo: https://github.com/eclipse/eclipse-collections
- home page: https://www.eclipse.org/collections/
- NOT persistent collections! 😱 not nice!
- implementation of java collections, has update operations actually and update operations throw
UnsupportedOperationException
😱, not nice!
- implementation of java collections, has update operations actually and update operations throw
commons-collections4
, The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.
guava
- it is well known that
guava
is more than a collection lib - Caffeine is the Java 8 successor to ConcurrentLinkedHashMap and Guava's cache. Projects should prefer Caffeine and migrate when requiring JDK8 or higher. The previous caching projects are supported in maintenance mode.
- code repo: https://github.com/google/guava
- contains immutable collections
- https://github.com/google/guava/wiki/ImmutableCollectionsExplained
- NOT persistent collections! 😱 not nice!
- implementation of java collections, has update operations actually and update operations throw
UnsupportedOperationException
😱, not nice!
- implementation of java collections, has update operations actually and update operations throw
- it is well known that
Related Resources
Maven Repository: collections https://mvnrepository.com/tags/collections
- persistent (immutable) collections
- Faster Purely Functional Data Structures for Java
- Data Structures in a Nutshell - vavr.io/vavr-docs
Functional Data Structures = immutable + persistent - Immutable/Persistent Data Structures for Functional JS – Anjana Vakil – PartialConf 2017 - Youtube
Terrific share for Persistent Data Structures!! ❤️
- primitive collections
- Fastutil vs. Trove4j
https://greatpowerlaw.wordpress.com/2013/04/08/fastutil-vs-trove4j/ - Trove library: using primitive collections for performance
http://java-performance.info/primitive-types-collections-trove-library/ - Efficient Scala with Primitive Collections
https://blog.juma.me.uk/tag/primitive-collections/ - Memory usage of Java objects: general guide
https://www.javamex.com/tutorials/memory/object_memory_usage.shtml
- Fastutil vs. Trove4j
Activity
[-]collection lib on jvm[/-][+]collection libs on jvm[/+]zavakid commentedon Jul 18, 2019
add:
Chronicle-Map