Commons-Collections contains implementations, enhancements and utilities that complement the Java Collections Framework.

The Apache Jakarta Commons Collections Framework component adds a significant amount of enhancements to the standard JDK collections. These enhancements come in the form of new interfaces, new implementations and utility classes.

See also the `java.util` package for the standard Java collections.

#### Main features

Commons-Collections defines a number of key interfaces:

Interface | Description
--- | ---
{@link org.apache.commons.collections.Bag} | A new `Collection` subinterface that stores each object together with the number of occurances. Methods are provided to get the number of occurances, and to add and remove a certain number of that object.
{@link org.apache.commons.collections.Buffer} | A new `Collection` subinterface that allows objects to be removed in some well-defined order. Methods enable the next item to be peeked and removed.
{@link org.apache.commons.collections.BidiMap} | A new `Map` subinterface that allows lookup from key to value and from value to key with equal ease.
{@link org.apache.commons.collections.OrderedMap} | A new `Map` subinterface that is used when a map has an order, but is not sorted. Methods enable bidriectional iteration through the map.
{@link org.apache.commons.collections.MapIterator} | A new `Iterator` subinterface specially designed for maps. This iterator avoids the need for entrySet iteration of a map, and is simpler to use.
{@link org.apache.commons.collections.ResettableIterator} | A new `Iterator` subinterface that allows the iteration to be reset back to the start. Many iterators in this library have this functionality.
{@link org.apache.commons.collections.Closure} {@link org.apache.commons.collections.Predicate} {@link org.apache.commons.collections.Transformer} {@link org.apache.commons.collections.Factory} | A group of functor interfaces that provide plugin behaviour to various collections and utilities.

In addition to the interfaces, there are many implementations. Consult each subpackage for full details of these.

#### Version 3.0

Commons-Collections was originally created as a place to share collection implementations created in various places around Jakarta. As a result, there was no clear design or structure to the component. As from this 3.0 release, that changes with a clear, consistent package structure being used

As a result of the new structure, several classes have moved packages. When moving from a previous release to this one it is important to check all your code. Some implementations that were moved were also optimised, and may contain API changes.

In addition to the new package structure, it was determined that collections was getting too large. As a result, two new code donations - primitive collections and event notification collections - have been separated into their own projects within commons. Primitives has already released a version 1.0, while Events resides in the sandbox at present.