These are the release notes for Commons Collections v3.2:
</p>
<hr/>
<p>
Commons collections is a project to develop and maintain collection classes
based on and inspired by the JDK collection framework.
This project is JDK1.2 compatible, and does not use JDK1.5 generics.
</p>
<p>
This release adds various new classes and fixes a number of bugs.
All feedback should be directed to commons-user at jakarta.apache.org.
</p>
<hr/>
<center><h3>COMPATIBILITY</h3></center>
<p>
This release is fully source and binary compatible with v3.1.
(Checks performed using JDiff and Clirr, thanks).
Please check the bug fixes to ensure you weren't relying on the behaviour of a bug.
</p>
<p>
There are two new <i>deprecations</i>:<br/>
BeanMap is now deprecated and will be removed in v4.0.
The class is now available in commons-beanutils (full jar version).
This change was made to ensure that all bean related collections were in one place (ie. beanutils).
If this causes major headaches to anyone please contact commons-dev at jakarta.apache.org.
</p>
<p>
MultiHashMap is now deprecated and will be removed in v4.0.
The class is now available as MultiValueMap in the map subpackage.
This new version of the class is a decorator and can wrap maps other than HashMap
making it much more flexible.
If this causes major headaches to anyone please contact commons-dev at jakarta.apache.org.
</p>
<center><h3>NEW CLASSES</h3></center>
<ul>
<li>MultiValueMap - Decorator implementation of MultiMap providing control over the map and collection implementations, updated MapUtils to match [29440]</li>
<li>DefaultedMap - Returns a default value when the key is not found, without adding the default value to the map itself [30911]</li>
<li>GrowthList - Decorator that causes set and indexed add to expand the list rather than throw IndexOutOfBoundsException [34171]</li>
<li>LoopingListIterator - When the end of the list is reached the iteration continues from the start, updated IteratorUtils to match [30166]</li>
<li>ReverseListIterator - A list iterator that returns the elements from the list in reverse order [39224]</li>
<li>BoundedBuffer - A new wrapper class which can make any buffer bounded, updated BufferUtils to match [37473]</li>
</ul>
<center><h3>ENHANCEMENTS</h3></center>
<ul>
<li>CollectionUtils.addIgnoreNull - Adds to the collection if the value being added is not null [30020]</li>
<li>MapUtils.putAll - Puts an array of key/value pairs into a map [30882]</li>
<li>CollectionUtils/MapUtils.isEmpty/isNotEmpty - Null-safe checks of collection emptyness [35890]</li>
<li>CollectionUtils.sizeIsEmpty - Checks if a collection, array, map, iterator or enumeration is empty</li>
<li>CollectionUtils/ListUtils - retainAll/removeAll that don't change original colllection</li>
<li>ExtendedProperties - Accepts List elements (does not enforce Vector) as values [36812]</li>
<li>ExtendedProperties - new Methods getList(String key) and getList(String key, List defaults) [36812]</li>
<li>ExtendedProperties - No longer uses an exception in normal processing [30497]</li>
<li>BlockingBuffer - now includes stack trace if InterupttedException occurs [33700]</li>
<li>BlockingBuffer - new methods that allow get and remove with a timeout, updated BufferUtils to match [27691]</li>
<li>BlockingBuffer - now allows you to specify a default timeout value for get/remove operations [37607]</li>
<li>TransformedMap/TransformedSortedMap - new factory decorateTransform() that transforms any existing entries in the map [30959]</li>
<li>ListOrderedMap - values can now be accessed as a List using valueList() [37015]</li>
<li>PriorityBuffer - now Serializable [36163]</li>
<li>ListIteratorWrapper - now implements ResettableListIterator [39449]</li>
<li>IfClosure - add single argument constructor, updated CllosureUtils to match [38495]</li>
<li>All/Any/One/None Predicate - allow construction with zero or one predicates [37979]</li>
</ul>
<center><h3>BUG FIXES</h3></center>
<ul>
<li>FastArrayList - Fix iterators and views to work better in multithreaded environments</li>
<li>FastArrayList - Fix iterator remove where ConcurrentModificationException not as expected [34690]</li>
<li>CursorableLinkedList (list subpackage) - Fix iterator remove/set not throwing IllegalStateException after next-previous-removeByIndex [35766]</li>
<li>TreeList/CursorableLinkedList/NodeCachingLinkedList/AbstractLinkedList - Fix iterator remove not working properly when called after previous [35258]</li>
<li>TreeList - remove(int) could break class invariants, breaking iterator previous [35258]</li>
<li>SetUniqueList.set(int,Object) - Destroyed set status in certain circumstances [33294]</li>
<li>AbstractLinkedMap.init() - Now calls createEntry() to create the map entry object [33706]</li>
<li>AbstractHashedMap deserialization - Fix to prevent doubling of internal data array [34265]</li>