diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 85f0f96c6..4a34df5ea 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -1,913 +1,916 @@
-
-
-
-
- Commons Collections Changes
-
-
-
-
- HashEntry array object naming data initialized with double the size during deserialization.
-
-
- Unit tests MapUtilsTest and ListIteratorWrapperTest no longer fail on Java 9.
-
-
- Intermittent test failures in Windows for HashSetValuedHashMap.
-
-
- Uncomment test in AbstractMapTest regarding LRUMap equals.
-
-
- Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility.
-
-
- Fix site build on Java 8.
-
-
- Update Javadoc to Build on Java 1.8.
-
-
- Build status, Coverage status and Maven central weren't in README.md
-
-
- Improve efficiency of DefaultedMap.get.
-
-
- Small improvements for generics, conditional statements, and warnings suppressions.
-
-
- Update platform from Java 6 to Java 7.
-
-
- Web site spelling error: MultiValuedMapeList.
-
-
- Correction of Javadoc for org.apache.commons.collections4.functors.CatchAndRethrowClosure.
-
-
- Add null-safe MapUtils.size(Map<?, ?>) method.
-
-
- PatriciaTrie prefixMap clear throws NullPointerException.
-
-
- Add class SortedProperties to sort keys.
-
-
- org.apache.commons.collections4.ListUtils.union(List, List) should pre-allocate result list.
-
-
- Update org.apache.commons.collections4.CollectionUtils.addAll(Collection<C>, C[]) to addAll(Collection<C>, C...).
-
-
- Add CollectionUtils containsAny method for primitive array: org.apache.commons.collections4.CollectionUtils.containsAny(Collection<?>, T...).
-
-
- Synchronized queue wrapper in QueueUtils.
-
-
- Add org.apache.commons.collections4.IteratorUtils.first(Iterator).
-
-
- Add org.apache.commons.collections4.IterableUtils.first(Iterable).
-
-
-
-
- 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.
-
-
- Deprecated various method in "CollectionUtils" in favor of similar
- methods in the newly introduced "IterableUtils".
-
-
- 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.
-
-
- Added validation when de-serializing a "MultiValueMap#ReflectionFactory":
- only Collection classes are allowed, otherwise an UnsupportedOperationException
- will be thrown during de-serialization.
-
-
- 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.
-
-
- Subclasses of MultiKey did not re-calculate their hashcode after de-serialization.
-
-
- 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.
-
-
- All constructors and static factory methods will now throw a "NullPointerException" if
- a required input argument is null. Previously sometimes a "IllegalArgumentException" was used.
-
-
- Deprecated methods "synchronizedCollection(Collection)" and "unmodifiableCollection(Collection)"
- in class "CollectionUtils", the corresponding methods in "java.util.Collections" should be used instead.
-
-
- "IteratorUtils#collate(...)" methods did not use natural ordering when a
- null comparator was provided.
-
-
- Added support to specify the initial size of a "LRUMap".
-
-
- Added decorators for "NavigableSet" interface.
-
-
- Added new class "FluentIterable" to support a fluent API for manipulating
- Iterable instances. Additionally various supporting methods have been
- added to "IterableUtils" and "IteratorUtils".
-
-
- Added new "ZippingIterator" and factory methods "IteratorUtils#zippingIterator(...)".
-
-
- Added new decorator "SkippingIterator" and factory methods "IteratorUtils#skippingIterator(...)".
-
-
- Added method "SetUtils#newIdentityHashSet()" which returns a new identity HashSet
- using reference-equality instead of object-equality.
-
-
- Upgraded minimum java requirement to Java 6 (up from Java 5).
-
-
- Added method "LRUMap#get(Object, boolean)" that allows to query the map
- without affecting the least recently used order.
-
-
- Changed return type of "ListOrderedSet#remove(int)" from Object to the generic type parameter.
-
-
- Added clarification to javadoc of "TreeBag#add(Object)" wrt null arguments.
-
-
- Added "toString(...)" methods to newly created "IterableUtils" and existing "IteratorUtils"
- to get a string representation of an Iterable/Iterator instance similar to "Arrays#toString(...)".
-
-
- Reverted performance improvement for "SetUniqueList#retainAll(Collection)"
- introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead.
-
-
- Reverted performance improvement for "ListOrderedSet#retainAll(Collection)"
- introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead.
-
-
- 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.
-
-
- Documented runtime complexity of "CollectionUtils#removeAll(Collection, Collection).
-
-
- "AbstractCollectionDecorator" doesn't forward equals and hashCode anymore.
-
-
- Documented runtime complexity of "CollectionUtils#retainAll(Collection, Collection).
-
-
- "AbstractHashedMap" still inherits from "AbstractMap", contrary to what
- the class javadoc stated. The inheritance will now be removed in v5.0.
-
-
- Changed scope of "CircularFifoQueue#isAtFullCapacity()" to public.
-
-
- The map returned by "PatriciaTrie#prefixMap()" did not contain all keys
- that are prefixed by the given search key in some rare cases.
-
-
- Added new methods "IterableUtils#partition(...)" to partition an input collection
- into separate output collections based on evaluation of one or more predicates.
-
-
- Harmonized signature of factory methods for functor-related classes which take
- a collection as input with their array counterparts.
-
-
- Added overloaded method "CollectionUtils#get(Enumeration, int)" and simplified
- code for "CollectionUtils#get(Object, int)".
-
-
- Improved check for null input in "MapUtils#putAll(Map, Object[])".
-
-
- Added clarifying javadoc wrt runtime complexity of "CollectionBag#retainAll".
-
-
- Added methods "removeAll(...)" and "retainAll(...)" to "CollectionUtils" that perform
- equality checks using the provided "Equator" object instead of "Object#equals()".
-
-
- Use correct type bounds in
- "CollectionUtils#isEqualCollection(Collection, Collection, Equator)" to
- prevent a "ClassCastException" at runtime for invalid inputs.
-
-
- Removed unneeded private method in "PassiveExpiringMap".
-
-
- Added clarification to the javadoc of "MapUtils#toProperties(Map)" in case
- of null keys/values.
-
-
- "ListOrderedSet#listOrderedSet(List)" did not remove duplicates from the
- input list as advertised in the javadoc.
-
-
- "MultiKeyMap" was throwing a "NullPointerException" for various operations
- if two key arguments have been used and the second was "null".
-
-
- Updated code example for "PredicatedList".
-
-
- "TransformingComparator" and "FixedOrderComparator" did not comply with
- the contract of "Object#equals".
-
-
- Fix compilation errors when using source level 1.8 and a recent java 8 compiler.
-
-
- Clarified javadoc of "CollectionBag" wrt changes from the original Bag interface.
-
-
- Removed wrong type bounds for "ComparatorUtils#chainedComparator(...)".
-
-
- 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.
-
-
- Added new transformer "IfTransformer" and factory methods "TransformerUtils#ifTransformer(...)"
- which replace "TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)".
-
-
- Added new decorator "BoundedIterator" and factory methods "IteratorUtils#boundedIterator(...)".
-
-
-
-
- Resolved generic parameter inconsistency for various static fields, e.g. BagUtils.EMPTY_BAG,
- TruePredicate.INSTANCE and many others. All accessible static fields use raw types so that
- they can be used directly without explicit casting. To avoid compiler warnings about unchecked
- conversion and/or rawtypes use the corresponding factory methods, e.g. BagUtils.emptyBag().
-
-
- Renamed methods "V MultiKeyMap#remove(Object, Object, ...)" to
- "V MultiKeyMap#removeMultiKey(Object, Object, ...)" to avoid future conflicts
- with a default method of the Map interface in Java 8.
-
-
- Renamed "V MultiMap#remove(K, V)" to "boolean MultiMap#removeMapping(K, V)"
- to avoid future conflicts with a default method of the Map interface in Java 8.
-
-
- Refactored the test framework for Bag implementations to extend from
- "AbstractCollectionTest" by decorating the concrete Bag instance with
- a CollectionBag or CollectionSortedBag.
-
-
- "CollectionBag" will now also respect the contract of the decorated bag in case
- a null argument is provided to either removeAll or retainAll.
-
-
- Added bag decorator "CollectionSortedBag" which decorates a SortedBag to make it
- comply with the Collection contract.
-
-
- "UnmodifiableBoundedCollection" does now also implement the marker interface "Unmodifiable"
- similar as all other unmodifiable decorators.
-
-
- "UnmodifiableTrie#unmodifiableTrie(Trie)" will not decorate again an already
- unmodifiable Trie. Also the return type has been changed to "Trie" to be consistent
- with other Unmodifiable decorators.
-
-
- Moved "Equator" interface to base package for consistency.
-
-
- Added "CollectionsUtils#matchesAll(Iterable, Predicate)" to test if all elements
- of a collection match a given predicate.
-
-
- Accept wildcard input where possible, e.g. in copy-constructors, Unmodifiable* decorators
- and iterators.
-
-
- No collision detection/resolution was performed when calling "CompositeSet#addComposited(...)"
- with more than one Set as argument. Additionally use varargs parameters instead of arrays
- in CompositeSet and CompositeCollection constructor and addComposited method.
-
-
- Narrow return type of "BidiMap#values()" to Set as the values are required to be unique.
-
-
- Fixed conversion of timeout parameters in "PassiveExpiringMap".
-
-
- Exception in "ListOrderedMap#putAll" if map contains null values.
-
-
- Made field "collection" in class "AbstractCollectionDecorator" private and added
- setter "setCollection(Collection)" with scope protected to set the decorated collection
- during de-serialization.
-
-
- Improved performance of "AbstractMapBag#containsAll(Collection)" by returning immediately
- after a difference has been found.
-
-
- Renamed class "TransformedMap" in package "splitmap" to "TransformedSplitMap" to avoid
- name clash with similar class in package "map".
-
-
- Added bag decorator "CollectionBag" which decorates a bag to make it comply with the
- Collection contract.
-
-
- Replaced "Collection" with "Iterable" for method arguments where applicable.
-
-
- Added "PushbackIterator" decorator to support pushback of elements during iteration.
-
-
- Added "PeekingIterator" decorator to support one-element lookahead during iteration.
-
-
- Added additional clarification to javadoc of interface "Put" wrt return type of
- "put(Object, Object)" method.
-
-
- Changed "IteratorChain" to use internally a "Queue" instead of a "List". Iterators are
- removed from the queue once used and can be garbage collected after being exhausted.
- Additionally removed the methods "setIterator(Iterator)" and "getIterators()".
-
-
- Removed method "setArray(Object)" in class ArrayIterator and method "setArray(Object[])"
- in class ObjectArrayIterator and made fields array, startIndex and endIndex final.
-
-
- Removed unused class "AbstractUntypedCollectionDecorator<E, D>".
-
-
- Added methods "ListUtils#longestCommonSubsequence(...)" to get the longest common subsequence
- of arbitrary lists or CharSequences.
-
-
- Changed scope of fields to private where appropriate.
-
-
- An iterator over a "Flat3Map#entrySet()" will now return
- independent Map.Entry objects that will not change anymore when
- the iterator progresses.
-
-
- Several closure and transformer implementations in the functors package
- will now copy an array as input to their constructor (e.g. ChainedClosure).
-
-
- Change base package to org.apache.commons.collections4.
-
-
- The constructors for all Utils classes are now private to prevent instantiation.
-
-
- Added methods "forAllButLastDo(Collection, Closure)" and "forAllButLastDo(Iterator, Closure)"
- to class "CollectionUtils".
-
-
- Tree traversal with a TreeListIterator will not be affected anymore by
- the removal of an element directly after a call to previous().
-
-
- Added method "CollectionUtils#isEqualCollection(Collection, Collection, Equator)".
-
-
- Adapt and/or ignore several unit tests when run on a IBM J9 VM (specification version 1.6.0)
- due to a faulty "java.util.TreeMap" implementation.
-
-
- SetUniqueList.set(int, E) now works correctly if the object to be inserted
- is already placed at the given position.
-
-
- MultiKeyMap.clone() now correctly calls super.clone().
-
-
- Added "emptyIfNull" methods to classes "CollectionUtils", "ListUtils", "SetUtils"
- and "MapUtils".
-
-
- Improve performance of "TreeList#addAll" and "TreeList(Collection)" by converting
- the input collection into an AVL tree and efficiently merge it into the existing tree.
-
-
- Replaced "Buffer" interface with "java.util.Queue". Kept "CircularFifoQueue"
- as well as "Predicated", "Transformed" and "Unmodifiable" decorators.
-
-
- Added method "CollectionUtils#containsAll(Collection, Collection)" with guaranteed
- runtime complexity of O(n + m) and space complexity of O(n). This method may yield much
- better performance than "Collection#containsAll(Collection)" depending on the use-case and
- type of collection used.
-
-
- Fixed performance issue in "SetUniqueList#retainAll" method for large collections.
-
-
- Fixed performance issue in "ListOrderedSet#retainAll" method for large collections.
-
-
- Improved performance of "ListOrderedMap#remove(Object)" method.
-
-
- "CompositeSet" does not inherit from "CompositeCollection" anymore. The inner class
- "SetMutator" has been updated accordingly.
-
-
- Added method "CollectionUtils#permutations(Collection)" and class "PermutationIterator"
- to generate unordered permutations of a collection.
-
-
- Update javadoc for "ListUtils#lazyList()" and "ListUtils#fixedSizeList()".
-
-
- Added clarifying javadoc wrt runtime complexity of "AbstractDualBidiMap#retainAll".
-
-
- Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#retainAll".
-
-
- Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#removeAll".
-
-
- Fixed several compilation issues with older Java 1.6 compilers.
-
-
- Improved performance of "removeAll()" method for sets returned by "DualHashBidiMap#entrySet()".
-
-
- Improved performance of "CollectionUtils#subtract" methods.
-
-
- Fixed possible "IndexOutOfBoundsException" in "ListOrderedMap#putAll".
-
-
- Improved performance of "SetUniqueList#addAll" method.
-
-
- Improved performance of "ListOrderedSet#addAll" method.
-
-
- Improved performance of "SetUniqueList#removeAll".
-
-
- Improved performance of "ListOrderedSet#remove(Object)" in case the object is
- not contained in the Set.
-
-
- Improved performance of "ListUtils#subtract" method.
-
-
- Added "ListUtils#select" and "ListUtils#selectRejected" methods.
-
-
- Added an implementation of Eugene Myers difference algorithm in package
- o.a.c.c.sequence.
-
-
- Added missing null check in "CollectionUtils#addIgnoreNull(Collection, Object)".
-
-
- Added new method "get(int)" to "CircularFifoQueue".
-
-
- Added "LazyIteratorChain" iterator.
-
-
- Added "ListUtils#partition" method to split a List into consecutive sublists.
-
-
- Fixed javadoc for "MapUtils#toProperties(Map)".
-
-
- Clarified javadoc for "TransformerUtils#mapTransformer" for null input.
-
-
- Clarified javadoc for "FactoryUtils#prototypeFactory" for null input.
-
-
- Fixed inconsistent javadoc for "MapUtils#synchronizedMap(Map)".
-
-
- Added "CollectionUtils#forAllDo" implementation which takes an "Iterator" as input.
-
-
- Change maven coordinates to "org.apache.commons.commons-collections4".
-
-
- Move the project structure to a standard maven layout.
-
-
- Fixed infinite loop when calling "UnmodifiableBoundedCollection#unmodifiableBoundedCollection()".
-
-
- Fixed javadoc for several methods wrt expected NullPointerExceptions.
-
-
- Added method "ListUtils#defaultIfNull(List, List)".
-
-
- TransformingComparator now supports different types for its input/output values.
-
-
- "DualTreeBidiMap" now uses the correct comparator for the reverse map during de-serialization.
-
-
- "TransformedMap" in the package "splitmap" can now be serialized.
-
-
- "CollectionUtils#filter(Iterable, Predicate)" will now return whether the collection
- has been modified.
-
-
- Add method "CollectionUtils#filterInverse(Iterable, Predicate)".
-
-
- "FilterListIterator#hasNext" does not throw a NullPointerException anymore
- to comply to the Java iterator specification.
-
-
- "ListUtils#intersection(List, List)" will now also work correctly if there
- are duplicate elements in the provided lists.
-
-
- "AbstractCollectionDecorator" will now use internally "decorated()" to access
- the decorated collection.
-
-
- Removed features which are now supported by the JDK.
-
-
- Removed debug output in "MapUtils#getNumber(Map)".
-
-
- Fixed javadoc for all "transformedXXX(XXX)" methods in the respective Utils classes
- to clarify that existing objects in the list are not transformed.
-
-
- Singleton classes in package "functors" are now correctly de-serialized.
-
-
- "NOPClosure" is now a final class.
-
-
- Removed broken methods "equals(Object)" and "hashCode()" in class "NOPClosure".
-
-
- Simplified exceptions as the cause is available from the parent.
-
-
- Fixed cache assignment for "TreeBidiMap#entrySet".
-
-
- Synchronized access to lock in "StaticBucketMap#size()".
-
-
- Added clarification to javadoc of "ListOrderedMap" that "IdentityMap" and
- "CaseInsensitiveMap" are not supported.
-
-
- Improve javadoc of "CollatingIterator" wrt the used "Comparator" and throw a
- NullPointerException in "CollatingIterator#least" if no comparator is set.
-
-
- "LRUMap#keySet()#remove(Object)" will not throw a "ConcurrentModificationException" anymore.
-
-
- Improved performance of "ListUtils#intersection(List, List)".
-
-
- Added serialVersionUID fields for "CompositeCollection", "CompositeSet",
- "EmptyMapMutator", "EmptySetMutator".
-
-
- Fields transformer and decorated in class "TransformingComparator" are now final.
-
-
- Changed behavior of "CaseInsensitiveMap" constructor to be compliant with "HashMap"
- in case the initial capacity is set to zero.
-
-
- Added NodeListIterator and convenience methods in IteratorUtils to iterate over
- a org.w3c.dom.NodeList.
-
-
- Improved performance of "StaticBucketMap#putAll(Map)" by iterating over the entry set.
-
-
- Avoid redundant null check in "IteratorUtils#getIterator(Object)".
-
-
- Use a private method to populate the object in "AbstractHashedMap(Map)".
-
-
- Fixed javadoc of "LRUMap" wrt to the maxSize parameter of the constructor.
-
-
- Added new abstract class "CatchAndRethrowClosure" that re-throws any checked exception
- as unchecked "FunctorException".
-
-
- Use of final keyword where applicable, minor performance improvements by properly
- initializing the capacity of newly created collections when known in advance.
-
-
- "SetUniqueList#subList()" will now return an unmodifiable list as changes to it
- may invalidate the parent list.
-
-
- "SetUniqueList#subList()#contains(Object)" will now correctly check the subList
- rather than the parent list.
-
-
- Added method "CollectionUtils#subtract(Iterable, Iterable, Predicate)".
-
-
- "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint.
-
-
- Improved javadoc for "Unmodifiable*" classes wrt behavior when the users tries
- to modify the collection.
-
-
- Calling "CollectionUtils#sizeIsEmpty(null)" will now return true.
-
-
- Added methods "CollectionUtils#collate(...)" to merge two sorted Collections
- into a sorted List using the standard O(n) merge algorithm.
-
-
- "CaseInsensitiveMap" will now convert input strings to lower-case in a
- locale-independant manner.
-
-
- Added support for using custom "Equator" objects in "EqualPredicate".
-
-
- Added method "CollatingIterator#getIteratorIndex()".
-
-
- Fixed javadoc for "ListUtils#transformedList(List)" to clarify that existing objects
- in the list are not transformed.
-
-
- Added method "CollectionUtils#extractSingleton(Collection)".
-
-
- Added serialization support for "TreeBidiMap".
-
-
- The predicate that rejected an object to be added to a "PredicatedCollection"
- is now contained in the respective exception message.
-
-
- Added "IndexedCollection" collection decorator which provides a map-like
- view on an existing collection.
-
-
- Added serialization support for "FixedOrderComparator" and "TransformingComparator".
-
-
- "MultiKey" will now be correctly serialized/de-serialized.
-
-
- "TreeBag" will now only accept "Comparable" objects as input when used with natural ordering.
-
-
- Added methods "MapUtils#populateMap(MultiMap, ...)" to support also "MultiMap" instances
- as input.
-
-
- Fixed javadoc for methods "firstKey()" and "lastKey()" in class "AbstractLinkedMap".
-
-
- "Flat3Map#remove(Object)" will now return the correct value mapped to the removed key
- if the size of the map is less or equal 3.
-
-
- Added constructor "TransformingComparator(Transformer)".
-
-
- Added "DualLinkedHashBidiMap" bidi map implementation.
-
-
- Removed unused variables in "TreeBidiMap".
-
-
- The static factory methods have been renamed from "getInstance()" to a camel-case
- version of the class name, e.g. "truePredicate()" for class "TruePredicate".
-
-
- "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the
- provided index.
-
-
- Added "Equator" interface.
-
-
- Added "PassiveExpiringMap" map decorator.
-
-
- "MultiValueMap" is now serializable.
-
-
- Added method "MultiValueMap#iterator()" to return a flattened version of
- "entrySet().iterator()". Clarified javadoc for "entrySet()" that the returned Entry
- objects are unflattened, i.e. the Entry object for a given key contains all values
- mapped to this key.
-
-
- Added method "ListUtils#indexOf(List, Predicate)".
-
-
- Fixed several unit tests which were using parameters to "assertEquals(...)" in wrong order.
-
-
- Return concrete class in static factory methods instead of base class interface
- (except for Unmodifiable decorators).
-
-
- "CollectionUtils#size(Collection)" now returns 0 when called with null as input.
-
-
- Removed deprecated classes and methods.
-
-
- "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)"
- now correctly return if the map has changed by this operation.
-
-
- Added method "ListOrderedMap#putAll(int, Map)".
-
-
- Added new "Trie" interface with a first concrete implementation "PatriciaTrie"
- together with decorators "Unmodifiable" and "Synchronized".
-
-
- "CollectionUtils#addAll(...)" methods now return if the collection has been changed
- by this operation.
-
-
- "CompositeCollection", "CompositeMap" and "CompositeSet" are now serializable.
-
-
- "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll".
-
-
- The "CollectionUtils#select(Collection, Predicate, Collection)" method will now
- return the output collection.
-
-
- Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now
- correctly set the value for the current entry.
-
-
- "MultiKey#toString()" will now use "Arrays#toString(List)".
-
-
- Added support for resettable iterators in "IteratorIterable".
-
-
- Added methods "MapUtils#populateMap(Map, Iterable, Transformer, ...)".
-
-
- "CollectionUtils#forAllDo(Collection, Closure)" now returns the provided closure.
-
-
- Make generic versions of all classes in collections.
-
-
- Added class "ComparatorPredicate".
-
-
-
-
- Serialization support for unsafe classes in the functor package is disabled
- by default as this can be exploited for remote code execution attacks.
- To re-enable the feature the system property "org.apache.commons.collections.enableUnsafeSerialization"
- needs to be set to "true".
- Classes considered to be unsafe are: CloneTransformer, ForClosure, InstantiateFactory,
- InstantiateTransformer, InvokerTransformer, PrototypeCloneFactory,
- PrototypeSerializationFactory, WhileClosure.
-
-
- "ExtendedProperties" will now use a privileged action to access the
- "file.separator" system property. In case the class does not have
- permission to read system properties, the "File#separator" field will
- be used instead.
-
-
- Tree traversal with a TreeListIterator will not be affected anymore by
- the removal of an element directly after a call to previous().
-
-
- SetUniqueList.set(int, Object) now works correctly if the object to be inserted
- is already placed at the given position.
-
-
- Removed debug output in "MapUtils#getNumber(Map)".
-
-
- Fixed cache assignment for "TreeBidiMap#entrySet".
-
-
- Synchronized access to lock in "StaticBucketMap#size()".
-
-
- "SetUniqueList#subList()#contains(Object)" will now correctly check the subList
- rather than the parent list.
-
-
- "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint.
-
-
- "CaseInsensitiveMap" will now convert input strings to lower-case in a
- locale-independent manner.
-
-
- "MultiKey" will now be correctly serialized/de-serialized.
-
-
- "Flat3Map#remove(Object)" will now return the correct value mapped to the removed key
- if the size of the map is less or equal 3.
-
-
- "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the
- provided index.
-
-
- "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)"
- now correctly return if the map has changed by this operation.
-
-
- "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll".
-
-
- Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now
- correctly set the value for the current entry.
-
-
-
-
+
+
+
+
+ Commons Collections Changes
+
+
+
+
+ HashEntry array object naming data initialized with double the size during deserialization.
+
+
+ Unit tests MapUtilsTest and ListIteratorWrapperTest no longer fail on Java 9.
+
+
+ Intermittent test failures in Windows for HashSetValuedHashMap.
+
+
+ Uncomment test in AbstractMapTest regarding LRUMap equals.
+
+
+ Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility.
+
+
+ Fix site build on Java 8.
+
+
+ Update Javadoc to Build on Java 1.8.
+
+
+ Build status, Coverage status and Maven central weren't in README.md
+
+
+ Improve efficiency of DefaultedMap.get.
+
+
+ Small improvements for generics, conditional statements, and warnings suppressions.
+
+
+ Update platform from Java 6 to Java 7.
+
+
+ Web site spelling error: MultiValuedMapeList.
+
+
+ Correction of Javadoc for org.apache.commons.collections4.functors.CatchAndRethrowClosure.
+
+
+ Add null-safe MapUtils.size(Map<?, ?>) method.
+
+
+ PatriciaTrie prefixMap clear throws NullPointerException.
+
+
+ Add class SortedProperties to sort keys.
+
+
+ org.apache.commons.collections4.ListUtils.union(List, List) should pre-allocate result list.
+
+
+ Update org.apache.commons.collections4.CollectionUtils.addAll(Collection<C>, C[]) to addAll(Collection<C>, C...).
+
+
+ Add CollectionUtils containsAny method for primitive array: org.apache.commons.collections4.CollectionUtils.containsAny(Collection<?>, T...).
+
+
+ Synchronized queue wrapper in QueueUtils.
+
+
+ Add org.apache.commons.collections4.IteratorUtils.first(Iterator).
+
+
+ Add org.apache.commons.collections4.IterableUtils.first(Iterable).
+
+
+ Modify IteratorUtils.peekingIterator signature to return PeekingIterator.
+
+
+
+
+ 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.
+
+
+ Deprecated various method in "CollectionUtils" in favor of similar
+ methods in the newly introduced "IterableUtils".
+
+
+ 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.
+
+
+ Added validation when de-serializing a "MultiValueMap#ReflectionFactory":
+ only Collection classes are allowed, otherwise an UnsupportedOperationException
+ will be thrown during de-serialization.
+
+
+ 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.
+
+
+ Subclasses of MultiKey did not re-calculate their hashcode after de-serialization.
+
+
+ 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.
+
+
+ All constructors and static factory methods will now throw a "NullPointerException" if
+ a required input argument is null. Previously sometimes a "IllegalArgumentException" was used.
+
+
+ Deprecated methods "synchronizedCollection(Collection)" and "unmodifiableCollection(Collection)"
+ in class "CollectionUtils", the corresponding methods in "java.util.Collections" should be used instead.
+
+
+ "IteratorUtils#collate(...)" methods did not use natural ordering when a
+ null comparator was provided.
+
+
+ Added support to specify the initial size of a "LRUMap".
+
+
+ Added decorators for "NavigableSet" interface.
+
+
+ Added new class "FluentIterable" to support a fluent API for manipulating
+ Iterable instances. Additionally various supporting methods have been
+ added to "IterableUtils" and "IteratorUtils".
+
+
+ Added new "ZippingIterator" and factory methods "IteratorUtils#zippingIterator(...)".
+
+
+ Added new decorator "SkippingIterator" and factory methods "IteratorUtils#skippingIterator(...)".
+
+
+ Added method "SetUtils#newIdentityHashSet()" which returns a new identity HashSet
+ using reference-equality instead of object-equality.
+
+
+ Upgraded minimum java requirement to Java 6 (up from Java 5).
+
+
+ Added method "LRUMap#get(Object, boolean)" that allows to query the map
+ without affecting the least recently used order.
+
+
+ Changed return type of "ListOrderedSet#remove(int)" from Object to the generic type parameter.
+
+
+ Added clarification to javadoc of "TreeBag#add(Object)" wrt null arguments.
+
+
+ Added "toString(...)" methods to newly created "IterableUtils" and existing "IteratorUtils"
+ to get a string representation of an Iterable/Iterator instance similar to "Arrays#toString(...)".
+
+
+ Reverted performance improvement for "SetUniqueList#retainAll(Collection)"
+ introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead.
+
+
+ Reverted performance improvement for "ListOrderedSet#retainAll(Collection)"
+ introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead.
+
+
+ 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.
+
+
+ Documented runtime complexity of "CollectionUtils#removeAll(Collection, Collection).
+
+
+ "AbstractCollectionDecorator" doesn't forward equals and hashCode anymore.
+
+
+ Documented runtime complexity of "CollectionUtils#retainAll(Collection, Collection).
+
+
+ "AbstractHashedMap" still inherits from "AbstractMap", contrary to what
+ the class javadoc stated. The inheritance will now be removed in v5.0.
+
+
+ Changed scope of "CircularFifoQueue#isAtFullCapacity()" to public.
+
+
+ The map returned by "PatriciaTrie#prefixMap()" did not contain all keys
+ that are prefixed by the given search key in some rare cases.
+
+
+ Added new methods "IterableUtils#partition(...)" to partition an input collection
+ into separate output collections based on evaluation of one or more predicates.
+
+
+ Harmonized signature of factory methods for functor-related classes which take
+ a collection as input with their array counterparts.
+
+
+ Added overloaded method "CollectionUtils#get(Enumeration, int)" and simplified
+ code for "CollectionUtils#get(Object, int)".
+
+
+ Improved check for null input in "MapUtils#putAll(Map, Object[])".
+
+
+ Added clarifying javadoc wrt runtime complexity of "CollectionBag#retainAll".
+
+
+ Added methods "removeAll(...)" and "retainAll(...)" to "CollectionUtils" that perform
+ equality checks using the provided "Equator" object instead of "Object#equals()".
+
+
+ Use correct type bounds in
+ "CollectionUtils#isEqualCollection(Collection, Collection, Equator)" to
+ prevent a "ClassCastException" at runtime for invalid inputs.
+
+
+ Removed unneeded private method in "PassiveExpiringMap".
+
+
+ Added clarification to the javadoc of "MapUtils#toProperties(Map)" in case
+ of null keys/values.
+
+
+ "ListOrderedSet#listOrderedSet(List)" did not remove duplicates from the
+ input list as advertised in the javadoc.
+
+
+ "MultiKeyMap" was throwing a "NullPointerException" for various operations
+ if two key arguments have been used and the second was "null".
+
+
+ Updated code example for "PredicatedList".
+
+
+ "TransformingComparator" and "FixedOrderComparator" did not comply with
+ the contract of "Object#equals".
+
+
+ Fix compilation errors when using source level 1.8 and a recent java 8 compiler.
+
+
+ Clarified javadoc of "CollectionBag" wrt changes from the original Bag interface.
+
+
+ Removed wrong type bounds for "ComparatorUtils#chainedComparator(...)".
+
+
+ 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.
+
+
+ Added new transformer "IfTransformer" and factory methods "TransformerUtils#ifTransformer(...)"
+ which replace "TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)".
+
+
+ Added new decorator "BoundedIterator" and factory methods "IteratorUtils#boundedIterator(...)".
+
+
+
+
+ Resolved generic parameter inconsistency for various static fields, e.g. BagUtils.EMPTY_BAG,
+ TruePredicate.INSTANCE and many others. All accessible static fields use raw types so that
+ they can be used directly without explicit casting. To avoid compiler warnings about unchecked
+ conversion and/or rawtypes use the corresponding factory methods, e.g. BagUtils.emptyBag().
+
+
+ Renamed methods "V MultiKeyMap#remove(Object, Object, ...)" to
+ "V MultiKeyMap#removeMultiKey(Object, Object, ...)" to avoid future conflicts
+ with a default method of the Map interface in Java 8.
+
+
+ Renamed "V MultiMap#remove(K, V)" to "boolean MultiMap#removeMapping(K, V)"
+ to avoid future conflicts with a default method of the Map interface in Java 8.
+
+
+ Refactored the test framework for Bag implementations to extend from
+ "AbstractCollectionTest" by decorating the concrete Bag instance with
+ a CollectionBag or CollectionSortedBag.
+
+
+ "CollectionBag" will now also respect the contract of the decorated bag in case
+ a null argument is provided to either removeAll or retainAll.
+
+
+ Added bag decorator "CollectionSortedBag" which decorates a SortedBag to make it
+ comply with the Collection contract.
+
+
+ "UnmodifiableBoundedCollection" does now also implement the marker interface "Unmodifiable"
+ similar as all other unmodifiable decorators.
+
+
+ "UnmodifiableTrie#unmodifiableTrie(Trie)" will not decorate again an already
+ unmodifiable Trie. Also the return type has been changed to "Trie" to be consistent
+ with other Unmodifiable decorators.
+
+
+ Moved "Equator" interface to base package for consistency.
+
+
+ Added "CollectionsUtils#matchesAll(Iterable, Predicate)" to test if all elements
+ of a collection match a given predicate.
+
+
+ Accept wildcard input where possible, e.g. in copy-constructors, Unmodifiable* decorators
+ and iterators.
+
+
+ No collision detection/resolution was performed when calling "CompositeSet#addComposited(...)"
+ with more than one Set as argument. Additionally use varargs parameters instead of arrays
+ in CompositeSet and CompositeCollection constructor and addComposited method.
+
+
+ Narrow return type of "BidiMap#values()" to Set as the values are required to be unique.
+
+
+ Fixed conversion of timeout parameters in "PassiveExpiringMap".
+
+
+ Exception in "ListOrderedMap#putAll" if map contains null values.
+
+
+ Made field "collection" in class "AbstractCollectionDecorator" private and added
+ setter "setCollection(Collection)" with scope protected to set the decorated collection
+ during de-serialization.
+
+
+ Improved performance of "AbstractMapBag#containsAll(Collection)" by returning immediately
+ after a difference has been found.
+
+
+ Renamed class "TransformedMap" in package "splitmap" to "TransformedSplitMap" to avoid
+ name clash with similar class in package "map".
+
+
+ Added bag decorator "CollectionBag" which decorates a bag to make it comply with the
+ Collection contract.
+
+
+ Replaced "Collection" with "Iterable" for method arguments where applicable.
+
+
+ Added "PushbackIterator" decorator to support pushback of elements during iteration.
+
+
+ Added "PeekingIterator" decorator to support one-element lookahead during iteration.
+
+
+ Added additional clarification to javadoc of interface "Put" wrt return type of
+ "put(Object, Object)" method.
+
+
+ Changed "IteratorChain" to use internally a "Queue" instead of a "List". Iterators are
+ removed from the queue once used and can be garbage collected after being exhausted.
+ Additionally removed the methods "setIterator(Iterator)" and "getIterators()".
+
+
+ Removed method "setArray(Object)" in class ArrayIterator and method "setArray(Object[])"
+ in class ObjectArrayIterator and made fields array, startIndex and endIndex final.
+
+
+ Removed unused class "AbstractUntypedCollectionDecorator<E, D>".
+
+
+ Added methods "ListUtils#longestCommonSubsequence(...)" to get the longest common subsequence
+ of arbitrary lists or CharSequences.
+
+
+ Changed scope of fields to private where appropriate.
+
+
+ An iterator over a "Flat3Map#entrySet()" will now return
+ independent Map.Entry objects that will not change anymore when
+ the iterator progresses.
+
+
+ Several closure and transformer implementations in the functors package
+ will now copy an array as input to their constructor (e.g. ChainedClosure).
+
+
+ Change base package to org.apache.commons.collections4.
+
+
+ The constructors for all Utils classes are now private to prevent instantiation.
+
+
+ Added methods "forAllButLastDo(Collection, Closure)" and "forAllButLastDo(Iterator, Closure)"
+ to class "CollectionUtils".
+
+
+ Tree traversal with a TreeListIterator will not be affected anymore by
+ the removal of an element directly after a call to previous().
+
+
+ Added method "CollectionUtils#isEqualCollection(Collection, Collection, Equator)".
+
+
+ Adapt and/or ignore several unit tests when run on a IBM J9 VM (specification version 1.6.0)
+ due to a faulty "java.util.TreeMap" implementation.
+
+
+ SetUniqueList.set(int, E) now works correctly if the object to be inserted
+ is already placed at the given position.
+
+
+ MultiKeyMap.clone() now correctly calls super.clone().
+
+
+ Added "emptyIfNull" methods to classes "CollectionUtils", "ListUtils", "SetUtils"
+ and "MapUtils".
+
+
+ Improve performance of "TreeList#addAll" and "TreeList(Collection)" by converting
+ the input collection into an AVL tree and efficiently merge it into the existing tree.
+
+
+ Replaced "Buffer" interface with "java.util.Queue". Kept "CircularFifoQueue"
+ as well as "Predicated", "Transformed" and "Unmodifiable" decorators.
+
+
+ Added method "CollectionUtils#containsAll(Collection, Collection)" with guaranteed
+ runtime complexity of O(n + m) and space complexity of O(n). This method may yield much
+ better performance than "Collection#containsAll(Collection)" depending on the use-case and
+ type of collection used.
+
+
+ Fixed performance issue in "SetUniqueList#retainAll" method for large collections.
+
+
+ Fixed performance issue in "ListOrderedSet#retainAll" method for large collections.
+
+
+ Improved performance of "ListOrderedMap#remove(Object)" method.
+
+
+ "CompositeSet" does not inherit from "CompositeCollection" anymore. The inner class
+ "SetMutator" has been updated accordingly.
+
+
+ Added method "CollectionUtils#permutations(Collection)" and class "PermutationIterator"
+ to generate unordered permutations of a collection.
+
+
+ Update javadoc for "ListUtils#lazyList()" and "ListUtils#fixedSizeList()".
+
+
+ Added clarifying javadoc wrt runtime complexity of "AbstractDualBidiMap#retainAll".
+
+
+ Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#retainAll".
+
+
+ Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#removeAll".
+
+
+ Fixed several compilation issues with older Java 1.6 compilers.
+
+
+ Improved performance of "removeAll()" method for sets returned by "DualHashBidiMap#entrySet()".
+
+
+ Improved performance of "CollectionUtils#subtract" methods.
+
+
+ Fixed possible "IndexOutOfBoundsException" in "ListOrderedMap#putAll".
+
+
+ Improved performance of "SetUniqueList#addAll" method.
+
+
+ Improved performance of "ListOrderedSet#addAll" method.
+
+
+ Improved performance of "SetUniqueList#removeAll".
+
+
+ Improved performance of "ListOrderedSet#remove(Object)" in case the object is
+ not contained in the Set.
+
+
+ Improved performance of "ListUtils#subtract" method.
+
+
+ Added "ListUtils#select" and "ListUtils#selectRejected" methods.
+
+
+ Added an implementation of Eugene Myers difference algorithm in package
+ o.a.c.c.sequence.
+
+
+ Added missing null check in "CollectionUtils#addIgnoreNull(Collection, Object)".
+
+
+ Added new method "get(int)" to "CircularFifoQueue".
+
+
+ Added "LazyIteratorChain" iterator.
+
+
+ Added "ListUtils#partition" method to split a List into consecutive sublists.
+
+
+ Fixed javadoc for "MapUtils#toProperties(Map)".
+
+
+ Clarified javadoc for "TransformerUtils#mapTransformer" for null input.
+
+
+ Clarified javadoc for "FactoryUtils#prototypeFactory" for null input.
+
+
+ Fixed inconsistent javadoc for "MapUtils#synchronizedMap(Map)".
+
+
+ Added "CollectionUtils#forAllDo" implementation which takes an "Iterator" as input.
+
+
+ Change maven coordinates to "org.apache.commons.commons-collections4".
+
+
+ Move the project structure to a standard maven layout.
+
+
+ Fixed infinite loop when calling "UnmodifiableBoundedCollection#unmodifiableBoundedCollection()".
+
+
+ Fixed javadoc for several methods wrt expected NullPointerExceptions.
+
+
+ Added method "ListUtils#defaultIfNull(List, List)".
+
+
+ TransformingComparator now supports different types for its input/output values.
+
+
+ "DualTreeBidiMap" now uses the correct comparator for the reverse map during de-serialization.
+
+
+ "TransformedMap" in the package "splitmap" can now be serialized.
+
+
+ "CollectionUtils#filter(Iterable, Predicate)" will now return whether the collection
+ has been modified.
+
+
+ Add method "CollectionUtils#filterInverse(Iterable, Predicate)".
+
+
+ "FilterListIterator#hasNext" does not throw a NullPointerException anymore
+ to comply to the Java iterator specification.
+
+
+ "ListUtils#intersection(List, List)" will now also work correctly if there
+ are duplicate elements in the provided lists.
+
+
+ "AbstractCollectionDecorator" will now use internally "decorated()" to access
+ the decorated collection.
+
+
+ Removed features which are now supported by the JDK.
+
+
+ Removed debug output in "MapUtils#getNumber(Map)".
+
+
+ Fixed javadoc for all "transformedXXX(XXX)" methods in the respective Utils classes
+ to clarify that existing objects in the list are not transformed.
+
+
+ Singleton classes in package "functors" are now correctly de-serialized.
+
+
+ "NOPClosure" is now a final class.
+
+
+ Removed broken methods "equals(Object)" and "hashCode()" in class "NOPClosure".
+
+
+ Simplified exceptions as the cause is available from the parent.
+
+
+ Fixed cache assignment for "TreeBidiMap#entrySet".
+
+
+ Synchronized access to lock in "StaticBucketMap#size()".
+
+
+ Added clarification to javadoc of "ListOrderedMap" that "IdentityMap" and
+ "CaseInsensitiveMap" are not supported.
+
+
+ Improve javadoc of "CollatingIterator" wrt the used "Comparator" and throw a
+ NullPointerException in "CollatingIterator#least" if no comparator is set.
+
+
+ "LRUMap#keySet()#remove(Object)" will not throw a "ConcurrentModificationException" anymore.
+
+
+ Improved performance of "ListUtils#intersection(List, List)".
+
+
+ Added serialVersionUID fields for "CompositeCollection", "CompositeSet",
+ "EmptyMapMutator", "EmptySetMutator".
+
+
+ Fields transformer and decorated in class "TransformingComparator" are now final.
+
+
+ Changed behavior of "CaseInsensitiveMap" constructor to be compliant with "HashMap"
+ in case the initial capacity is set to zero.
+
+
+ Added NodeListIterator and convenience methods in IteratorUtils to iterate over
+ a org.w3c.dom.NodeList.
+
+
+ Improved performance of "StaticBucketMap#putAll(Map)" by iterating over the entry set.
+
+
+ Avoid redundant null check in "IteratorUtils#getIterator(Object)".
+
+
+ Use a private method to populate the object in "AbstractHashedMap(Map)".
+
+
+ Fixed javadoc of "LRUMap" wrt to the maxSize parameter of the constructor.
+
+
+ Added new abstract class "CatchAndRethrowClosure" that re-throws any checked exception
+ as unchecked "FunctorException".
+
+
+ Use of final keyword where applicable, minor performance improvements by properly
+ initializing the capacity of newly created collections when known in advance.
+
+
+ "SetUniqueList#subList()" will now return an unmodifiable list as changes to it
+ may invalidate the parent list.
+
+
+ "SetUniqueList#subList()#contains(Object)" will now correctly check the subList
+ rather than the parent list.
+
+
+ Added method "CollectionUtils#subtract(Iterable, Iterable, Predicate)".
+
+
+ "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint.
+
+
+ Improved javadoc for "Unmodifiable*" classes wrt behavior when the users tries
+ to modify the collection.
+
+
+ Calling "CollectionUtils#sizeIsEmpty(null)" will now return true.
+
+
+ Added methods "CollectionUtils#collate(...)" to merge two sorted Collections
+ into a sorted List using the standard O(n) merge algorithm.
+
+
+ "CaseInsensitiveMap" will now convert input strings to lower-case in a
+ locale-independant manner.
+
+
+ Added support for using custom "Equator" objects in "EqualPredicate".
+
+
+ Added method "CollatingIterator#getIteratorIndex()".
+
+
+ Fixed javadoc for "ListUtils#transformedList(List)" to clarify that existing objects
+ in the list are not transformed.
+
+
+ Added method "CollectionUtils#extractSingleton(Collection)".
+
+
+ Added serialization support for "TreeBidiMap".
+
+
+ The predicate that rejected an object to be added to a "PredicatedCollection"
+ is now contained in the respective exception message.
+
+
+ Added "IndexedCollection" collection decorator which provides a map-like
+ view on an existing collection.
+
+
+ Added serialization support for "FixedOrderComparator" and "TransformingComparator".
+
+
+ "MultiKey" will now be correctly serialized/de-serialized.
+
+
+ "TreeBag" will now only accept "Comparable" objects as input when used with natural ordering.
+
+
+ Added methods "MapUtils#populateMap(MultiMap, ...)" to support also "MultiMap" instances
+ as input.
+
+
+ Fixed javadoc for methods "firstKey()" and "lastKey()" in class "AbstractLinkedMap".
+
+
+ "Flat3Map#remove(Object)" will now return the correct value mapped to the removed key
+ if the size of the map is less or equal 3.
+
+
+ Added constructor "TransformingComparator(Transformer)".
+
+
+ Added "DualLinkedHashBidiMap" bidi map implementation.
+
+
+ Removed unused variables in "TreeBidiMap".
+
+
+ The static factory methods have been renamed from "getInstance()" to a camel-case
+ version of the class name, e.g. "truePredicate()" for class "TruePredicate".
+
+
+ "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the
+ provided index.
+
+
+ Added "Equator" interface.
+
+
+ Added "PassiveExpiringMap" map decorator.
+
+
+ "MultiValueMap" is now serializable.
+
+
+ Added method "MultiValueMap#iterator()" to return a flattened version of
+ "entrySet().iterator()". Clarified javadoc for "entrySet()" that the returned Entry
+ objects are unflattened, i.e. the Entry object for a given key contains all values
+ mapped to this key.
+
+
+ Added method "ListUtils#indexOf(List, Predicate)".
+
+
+ Fixed several unit tests which were using parameters to "assertEquals(...)" in wrong order.
+
+
+ Return concrete class in static factory methods instead of base class interface
+ (except for Unmodifiable decorators).
+
+
+ "CollectionUtils#size(Collection)" now returns 0 when called with null as input.
+
+
+ Removed deprecated classes and methods.
+
+
+ "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)"
+ now correctly return if the map has changed by this operation.
+
+
+ Added method "ListOrderedMap#putAll(int, Map)".
+
+
+ Added new "Trie" interface with a first concrete implementation "PatriciaTrie"
+ together with decorators "Unmodifiable" and "Synchronized".
+
+
+ "CollectionUtils#addAll(...)" methods now return if the collection has been changed
+ by this operation.
+
+
+ "CompositeCollection", "CompositeMap" and "CompositeSet" are now serializable.
+
+
+ "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll".
+
+
+ The "CollectionUtils#select(Collection, Predicate, Collection)" method will now
+ return the output collection.
+
+
+ Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now
+ correctly set the value for the current entry.
+
+
+ "MultiKey#toString()" will now use "Arrays#toString(List)".
+
+
+ Added support for resettable iterators in "IteratorIterable".
+
+
+ Added methods "MapUtils#populateMap(Map, Iterable, Transformer, ...)".
+
+
+ "CollectionUtils#forAllDo(Collection, Closure)" now returns the provided closure.
+
+
+ Make generic versions of all classes in collections.
+
+
+ Added class "ComparatorPredicate".
+
+
+
+
+ Serialization support for unsafe classes in the functor package is disabled
+ by default as this can be exploited for remote code execution attacks.
+ To re-enable the feature the system property "org.apache.commons.collections.enableUnsafeSerialization"
+ needs to be set to "true".
+ Classes considered to be unsafe are: CloneTransformer, ForClosure, InstantiateFactory,
+ InstantiateTransformer, InvokerTransformer, PrototypeCloneFactory,
+ PrototypeSerializationFactory, WhileClosure.
+
+
+ "ExtendedProperties" will now use a privileged action to access the
+ "file.separator" system property. In case the class does not have
+ permission to read system properties, the "File#separator" field will
+ be used instead.
+
+
+ Tree traversal with a TreeListIterator will not be affected anymore by
+ the removal of an element directly after a call to previous().
+
+
+ SetUniqueList.set(int, Object) now works correctly if the object to be inserted
+ is already placed at the given position.
+
+
+ Removed debug output in "MapUtils#getNumber(Map)".
+
+
+ Fixed cache assignment for "TreeBidiMap#entrySet".
+
+
+ Synchronized access to lock in "StaticBucketMap#size()".
+
+
+ "SetUniqueList#subList()#contains(Object)" will now correctly check the subList
+ rather than the parent list.
+
+
+ "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint.
+
+
+ "CaseInsensitiveMap" will now convert input strings to lower-case in a
+ locale-independent manner.
+
+
+ "MultiKey" will now be correctly serialized/de-serialized.
+
+
+ "Flat3Map#remove(Object)" will now return the correct value mapped to the removed key
+ if the size of the map is less or equal 3.
+
+
+ "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the
+ provided index.
+
+
+ "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)"
+ now correctly return if the map has changed by this operation.
+
+
+ "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll".
+
+
+ Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now
+ correctly set the value for the current entry.
+
+
+
+
diff --git a/src/main/java/org/apache/commons/collections4/IteratorUtils.java b/src/main/java/org/apache/commons/collections4/IteratorUtils.java
index 79ce159f3..8863cd31d 100644
--- a/src/main/java/org/apache/commons/collections4/IteratorUtils.java
+++ b/src/main/java/org/apache/commons/collections4/IteratorUtils.java
@@ -856,8 +856,9 @@ public class IteratorUtils {
* @return a peeking iterator
* @throws NullPointerException if the iterator is null
* @since 4.0
+ * @since 4.2 returns a {@link PeekingIterator} instead of a {@link Iterator}.
*/
- public static Iterator peekingIterator(final Iterator extends E> iterator) {
+ public static PeekingIterator peekingIterator(final Iterator extends E> iterator) {
return PeekingIterator.peekingIterator(iterator);
}