Type-safe versions of the immutable Clojure collections, plus unmodifiable and immutable collection interfaces that extend the java.util collections, deprecating the mutate-in-place methods (Unmod____) and adding methods that return a new, immutable, modified version of the collection (Im____).
We want to make it as easy as possible to live in an immutable world while working with existing Java code. In a perfect world, all the Java APIs and existing code would be magically rewritten to use Immutable (according to the above definition) collections.
This package contains Unmodifiable "Unmod" interfaces which override, deprecate, and implement each of the "set" methods in the java.util collections interfaces. They also provide built-in Transformations (inherited from UnmodIterable). These interfaces were extremely useful before the "Im" implementations were added to this project, but may be able to be worked into the Immutable interfaces some day. If you find the "Unmod" interfaces really useful, please speak up!
Each of the "Unmod" interfaces is eventually extended by an "Im" interface which represent "Immutable" collections. The Immutable interfaces provide alternative "set" methods which return the altered collection, as well as some convenience methods.
Finally, there are various implementations of the Immutable interfaces. Most of those implementations (beginning with Persistent___) are derivative works of the source code for Clojure.