2009-09-15 01:32:28 -04:00
|
|
|
|
2013-05-03 07:47:35 -04:00
|
|
|
Apache Commons Collections
|
2015-11-21 18:47:52 -05:00
|
|
|
Version 4.1
|
2013-05-03 07:47:35 -04:00
|
|
|
RELEASE NOTES
|
2009-09-15 01:32:28 -04:00
|
|
|
|
|
|
|
INTRODUCTION:
|
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
Apache Commons Collections is a project to develop and maintain collection
|
|
|
|
classes based on and inspired by the JDK collection framework.
|
2009-09-15 01:32:28 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
This v4.1 release is a minor and security release, fixing several bugs present in
|
|
|
|
previous releases of the 4.X branch. Additionally, this release provides a mitigation
|
|
|
|
for a known remote code exploitation via the standard java object serialization
|
|
|
|
mechanism. Serialization support for unsafe classes in the functor package has been
|
|
|
|
completely removed (classes do not implement the Serializable interface anymore).
|
|
|
|
For more details, please refer to COLLECTIONS-580.
|
2013-05-03 07:47:35 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
All users are strongly encouraged to updated to this release.
|
2013-05-03 07:47:35 -04:00
|
|
|
|
|
|
|
|
2013-11-10 17:11:43 -05:00
|
|
|
Compatibility
|
|
|
|
-------------
|
2013-07-05 16:10:16 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
o Java 6 or later is now required (previous version 4.0 required Java 5).
|
|
|
|
o This release is source and binary compatible with the previous 4.0 release
|
|
|
|
of Commons Collections with the exception that some classes in the functor
|
|
|
|
package do not implement the Serializable interface anymore (see COLLECTIONS-580).
|
2013-11-17 13:30:24 -05:00
|
|
|
o some unit tests are disabled when executed with an IBM JDK 6 due to a faulty
|
|
|
|
java.util.TreeMap implementation.
|
2013-07-05 16:10:16 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
Major changes since 4.0
|
|
|
|
-----------------------
|
2013-07-05 16:10:16 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
o Added interface MultiSet (package multiset)
|
2015-11-21 19:37:47 -05:00
|
|
|
o Added interfaces MultiValuedMap, ListValuedMap and SetValuedMap (package multimap)
|
2015-11-21 18:47:52 -05:00
|
|
|
o Added fluent API for Iterable instances (class FluentIterable)
|
2013-05-03 07:47:35 -04:00
|
|
|
|
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
Changes
|
|
|
|
-------
|
2013-05-03 07:47:35 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
o [COLLECTIONS-580]: Serialization support for unsafe classes in the functor package
|
|
|
|
has been removed as this can be exploited for remote code execution
|
|
|
|
attacks. Classes considered to be unsafe are: CloneTransformer,
|
|
|
|
ForClosure, InstantiateFactory, InstantiateTransformer, InvokerTransformer,
|
|
|
|
PrototypeCloneFactory, PrototypeSerializationFactory, WhileClosure.
|
|
|
|
o [COLLECTIONS-551]: Deprecated various method in "CollectionUtils" in favor of similar
|
|
|
|
methods in the newly introduced "IterableUtils".
|
|
|
|
o [COLLECTIONS-570]: All constructors and static factory methods will now throw a "NullPointerException"
|
|
|
|
if a required input argument is null. Previously sometimes a "IllegalArgumentException"
|
|
|
|
was used.
|
|
|
|
o [COLLECTIONS-571]: Deprecated methods "synchronizedCollection(Collection)" and
|
|
|
|
"unmodifiableCollection(Collection)" in class "CollectionUtils", the corresponding
|
|
|
|
methods in "java.util.Collections" should be used instead.
|
|
|
|
o [COLLECTIONS-562]: Upgraded minimum java requirement to Java 6 (up from Java 5).
|
2013-05-03 07:47:35 -04:00
|
|
|
|
|
|
|
|
|
|
|
New features
|
|
|
|
------------
|
2009-09-15 01:32:28 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
o [COLLECTIONS-508]: Added new interfaces "MultiValuedMap", "ListValuedMap" and "SetValuedMap"
|
|
|
|
as a replacement for "MultiMap". Decorators and implementations reside in
|
|
|
|
the "multimap" package and a "MultiMapUtils" class has been added.
|
|
|
|
The existing interface "MultiMap" as well as the concrete implementation
|
|
|
|
"MultiValueMap" has been deprecated.
|
|
|
|
o [COLLECTIONS-567]: Added new MultiSet interface which is intended to be a replacement for
|
|
|
|
the Bag interface. The main difference is that a MultiSet is fully compatible
|
|
|
|
to the Collection contract.
|
|
|
|
o [COLLECTIONS-572]: Added set operations to "SetUtils": union, difference, intersection and disjunction.
|
|
|
|
The operations return a view of the result that is backed by the input sets.
|
|
|
|
o [COLLECTIONS-557]: Added support to specify the initial size of a "LRUMap". Thanks to Philippe Mouawad.
|
|
|
|
o [COLLECTIONS-565]: Added decorators for "NavigableSet" interface.
|
|
|
|
o [COLLECTIONS-464]
|
|
|
|
+COLLECTIONS-442]: Added new class "FluentIterable" to support a fluent API for manipulating
|
|
|
|
Iterable instances. Additionally various supporting methods have been
|
|
|
|
added to "IterableUtils" and "IteratorUtils".
|
|
|
|
o [COLLECTIONS-464]: Added new "ZippingIterator" and factory methods "IteratorUtils#zippingIterator(...)".
|
|
|
|
o [COLLECTIONS-464]: Added new decorator "SkippingIterator" and factory methods "IteratorUtils#skippingIterator(...)".
|
|
|
|
o [COLLECTIONS-556]: Added method "SetUtils#newIdentityHashSet()" which returns a new identity HashSet
|
|
|
|
using reference-equality instead of object-equality.
|
|
|
|
o [COLLECTIONS-395]: Added method "LRUMap#get(Object, boolean)" that allows to query the map
|
|
|
|
without affecting the least recently used order. Thanks to David Hawthorne.
|
|
|
|
o [COLLECTIONS-427]: Added "toString(...)" methods to newly created "IterableUtils" and existing "IteratorUtils"
|
|
|
|
to get a string representation of an Iterable/Iterator instance similar to "Arrays#toString(...)".
|
|
|
|
Thanks to Gonçalo Marques.
|
|
|
|
o [COLLECTIONS-539]: Changed scope of "CircularFifoQueue#isAtFullCapacity()" to public. Thanks to Guram Savinov.
|
|
|
|
o [COLLECTIONS-511]: Added new methods "IterableUtils#partition(...)" to partition an input collection
|
|
|
|
into separate output collections based on evaluation of one or more predicates.
|
|
|
|
Thanks to Nathan Blomquist, Brent Worden.
|
|
|
|
o [COLLECTIONS-529]: Added methods "removeAll(...)" and "retainAll(...)" to "CollectionUtils" that perform
|
|
|
|
equality checks using the provided "Equator" object instead of "Object#equals()".
|
|
|
|
Thanks to Alexander Muthmann, Dipanjan Laha.
|
|
|
|
o [COLLECTIONS-503]: Added new transformer "IfTransformer" and factory methods "TransformerUtils#ifTransformer(...)"
|
|
|
|
which replace "TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)".
|
|
|
|
Thanks to Josh Cain.
|
|
|
|
o [COLLECTIONS-471]: Added new decorator "BoundedIterator" and factory methods "IteratorUtils#boundedIterator(...)".
|
|
|
|
Thanks to Radford Tam.
|
2009-09-15 01:32:28 -04:00
|
|
|
|
|
|
|
|
2013-05-03 07:47:35 -04:00
|
|
|
Fixed Bugs
|
|
|
|
----------
|
2009-09-15 01:32:28 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
o [COLLECTIONS-580]: Added validation when de-serializing a "MultiValueMap#ReflectionFactory":
|
|
|
|
only Collection classes are allowed, otherwise an UnsupportedOperationException
|
|
|
|
will be thrown during de-serialization.
|
|
|
|
o [COLLECTIONS-576]: Subclasses of MultiKey did not re-calculate their hashcode after de-serialization.
|
|
|
|
Thanks to Stephan Roch.
|
|
|
|
o [COLLECTIONS-566]: "IteratorUtils#collate(...)" methods did not use natural ordering when a
|
|
|
|
null comparator was provided.
|
|
|
|
o [COLLECTIONS-558]: Changed return type of "ListOrderedSet#remove(int)" from Object to the generic
|
|
|
|
type parameter. Thanks to Felix Rabe.
|
|
|
|
o [COLLECTIONS-555]: Added clarification to javadoc of "TreeBag#add(Object)" wrt null arguments.
|
|
|
|
Thanks to M Kim.
|
|
|
|
o [COLLECTIONS-427]: Reverted performance improvement for "SetUniqueList#retainAll(Collection)"
|
|
|
|
introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead.
|
|
|
|
o [COLLECTIONS-426]: Reverted performance improvement for "ListOrderedSet#retainAll(Collection)"
|
|
|
|
introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead.
|
|
|
|
o [COLLECTIONS-530]: Added a Builder for "PredicatedCollection". Elements added to the builder
|
|
|
|
that fail the predicate will not throw an IllegalArgumentException. The builder
|
|
|
|
supports creating predicated lists, bags, sets and queues. Thanks to Erik.
|
|
|
|
o [COLLECTIONS-545]: Documented runtime complexity of "CollectionUtils#removeAll(Collection, Collection).
|
|
|
|
Thanks to Oswaldo Olivo.
|
|
|
|
o [COLLECTIONS-543]: "AbstractCollectionDecorator" doesn't forward equals and hashCode anymore.
|
|
|
|
o [COLLECTIONS-544]: Documented runtime complexity of "CollectionUtils#retainAll(Collection, Collection).
|
|
|
|
Thanks to Oswaldo Olivo.
|
|
|
|
o [COLLECTIONS-542]: "AbstractHashedMap" still inherits from "AbstractMap", contrary to what
|
|
|
|
the class javadoc stated. The inheritance will now be removed in v5.0.
|
|
|
|
o [COLLECTIONS-525]: The map returned by "PatriciaTrie#prefixMap()" did not contain all keys
|
|
|
|
that are prefixed by the given search key in some rare cases. Thanks to Zigler Zhang.
|
|
|
|
o [COLLECTIONS-537]: Harmonized signature of factory methods for functor-related classes which take
|
|
|
|
a collection as input with their array counterparts. Thanks to Frank Jakop.
|
|
|
|
o [COLLECTIONS-540]: Added overloaded method "CollectionUtils#get(Enumeration, int)" and simplified
|
|
|
|
code for "CollectionUtils#get(Object, int)". Thanks to Daniel Stewart, Issam El Atif.
|
|
|
|
o [COLLECTIONS-536]: Improved check for null input in "MapUtils#putAll(Map, Object[])". Thanks to Tagir Valeev.
|
|
|
|
o [COLLECTIONS-534]: Added clarifying javadoc wrt runtime complexity of "CollectionBag#retainAll".
|
|
|
|
Thanks to Oswaldo Olivo.
|
|
|
|
o [COLLECTIONS-531]: Use correct type bounds in
|
|
|
|
"CollectionUtils#isEqualCollection(Collection, Collection, Equator)" to
|
|
|
|
prevent a "ClassCastException" at runtime for invalid inputs. Thanks to Dipanjan Laha.
|
|
|
|
o [COLLECTIONS-523]: Removed unneeded private method in "PassiveExpiringMap". Thanks to Thiago Andrade.
|
|
|
|
o [COLLECTIONS-516]: Added clarification to the javadoc of "MapUtils#toProperties(Map)" in case
|
|
|
|
of null keys/values. Thanks to Cyrille Artho.
|
|
|
|
o [COLLECTIONS-524]: "ListOrderedSet#listOrderedSet(List)" did not remove duplicates from the
|
|
|
|
input list as advertised in the javadoc. Thanks to J Goodfellow.
|
|
|
|
o [COLLECTIONS-521]: "MultiKeyMap" was throwing a "NullPointerException" for various operations
|
|
|
|
if two key arguments have been used and the second was "null". Thanks to Maxime Nay.
|
|
|
|
o [COLLECTIONS-522]: Updated code example for "PredicatedList". Thanks to Erik.
|
|
|
|
o [COLLECTIONS-512]: "TransformingComparator" and "FixedOrderComparator" did not comply with
|
|
|
|
the contract of "Object#equals". Thanks to Cyrille Artho.
|
|
|
|
o [COLLECTIONS-510]: Fix compilation errors when using source level 1.8 and a recent java 8 compiler.
|
|
|
|
Thanks to Hollis Waite.
|
|
|
|
o [COLLECTIONS-509]: Clarified javadoc of "CollectionBag" wrt changes from the original Bag interface.
|
|
|
|
o [COLLECTIONS-507]: Removed wrong type bounds for "ComparatorUtils#chainedComparator(...)". Thanks to Gerson.
|
|
|
|
o [COLLECTIONS-506]: Added javadoc clarification to class "CollectionUtils" that input objects which
|
|
|
|
override "Object#equals(Object)" must also maintain the general contract of
|
|
|
|
"Object#hashCode()" as various utility methods take advantage of sets/maps/bags.
|
|
|
|
Thanks to Anthony Communier.
|
2009-09-15 01:32:28 -04:00
|
|
|
|
2015-11-21 18:47:52 -05:00
|
|
|
|
|
|
|
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
|
|
|
|
patches, or suggestions for improvement, see the Apache Apache Commons Collections website:
|
2009-09-15 01:32:28 -04:00
|
|
|
|
2013-05-03 07:47:35 -04:00
|
|
|
http://commons.apache.org/proper/commons-collections/
|