Apache Commons logo Commons Collections

Apache Commons Collections Release Notes

Release History

Version Date Description
4.4 2019-07-05 Maintenance release.
4.3 2018-12-21 Update from Java 7 to Java 8, bug fixes, and small changes.
4.2 2018-07-11 Update from Java 6 to Java 7, bug fixes, and small changes.
4.1 2015-11-28 This is a security and minor release.
4.0 2013-11-27 This is a major release: It combines bug fixes, new features and changes to existing features. Most notable changes are: use of generics and other language features introduced in Java 5 (varargs, Iterable), removed deprecated classes / methods and features which are now supported by the JDK, replaced Buffer interface with java.util.Queue, added concept of split maps with respective interfaces Put / Get (see also package splitmap), added new Trie interface together with an implementation of a Patricia Trie. Because of the base package name change, this release can be used together with earlier versions of Commons Collections. The minimal version of the Java platform required to compile and use Commons Collections is Java 5. Users are encouraged to upgrade to this version as, in addition to new features, this release includes numerous bug fixes.
3.2.2 2015-11-15 This is a security and bugfix release.

Release 4.4 – 2019-07-05

Type Changes By
Fix NullPointerExceptions in CompositeCollection, CompositeSet, and CompositeMap. Fixes COLLECTIONS-710. Thanks to Yu Shi, Gary Gregory. ggregory
Add Implement Collection's removeIf(). Fixes COLLECTIONS-715. Thanks to morningmemo, Gary Gregory. ggregory
Update Fix LRUMap exception message. Fixes COLLECTIONS-718. Thanks to Eitan Adler. ggregory
Add Create a PropertiesFactory and SortedPropertiesFactory. Fixes COLLECTIONS-719. Thanks to Gary Gregory. ggregory
Add Support Transformer for LazyList #52. Fixes COLLECTIONS-719. Thanks to Stephan Windmüller, Bruno P. Kinoshita. ggregory
Add Make use of FunctionalInterface #48. Fixes COLLECTIONS-723. Thanks to Eitan Adler, SOC, Bruno P. Kinoshita. ggregory
Update Don't include email address in Exception messages. Fixes COLLECTIONS-716. Thanks to Sebb. ggregory

Release 4.3 – 2018-12-21

Type Changes By
Fix Use boolean operator for boolean result. Fixes COLLECTIONS-691. Thanks to Eitan Adler. kinow
Update Update platform requirement from Java 7 to 8. Fixes COLLECTIONS-688. ggregory
Update Link to Javadoc API broken. Fixes COLLECTIONS-689. Thanks to Richard Walker. ggregory
Update Replace use of deprecated Class#newInstance() PR #49. Fixes COLLECTIONS-692. Thanks to Gary Gregory, Eitan Adler. ggregory
Add AbstractReferenceMap made easier for subclassing; PR #51. Fixes COLLECTIONS-696. Thanks to Maxim Solodovnik. ggregory
Fix StackOverflowError in SetUniqueList.add() when it receives itself. Fixes COLLECTIONS-701. Thanks to Shin Hong, Don Jeba. ggregory
Fix The PassiveExpiringMap#put() method should return the previous record only if not expired. Fixes COLLECTIONS-703. Thanks to Tomas Tulka. ggregory
Fix Add SetUtils.unmodifiableSet(T... items) method. Fixes COLLECTIONS-706. Thanks to Richard Eckart de Castilho, Gary Gregory. ggregory
Fix MultiSet.Entry::getCount() isn't 0 after removing the last element. Fixes COLLECTIONS-709. Thanks to Robert Wertman. ggregory

Release 4.2 – 2018-07-11

Type Changes By
Add Add test for MultiSetUtils. Fixes COLLECTIONS-681. Thanks to Stephan Fuhrmann. kinow
Fix HashEntry array object naming data initialized with double the size during deserialization. Fixes COLLECTIONS-599. Thanks to Tejas Patel, Saleem Akbar, Gary Gregory. ggregory
Fix Unit tests MapUtilsTest and ListIteratorWrapperTest no longer fail on Java 9. Fixes COLLECTIONS-662. Thanks to Vamsi Kavuri. chtompki
Fix Intermittent test failures in Windows for HashSetValuedHashMap. Fixes COLLECTIONS-661. kinow
Fix Uncomment test in AbstractMapTest regarding LRUMap equals. Fixes COLLECTIONS-660. kinow
Add Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility. Fixes COLLECTIONS-658. britter
Fix Fix site build on Java 8. Fixes COLLECTIONS-656. ggregory
Fix Update Javadoc to Build on Java 1.8. Fixes COLLECTIONS-653. kinow
Fix Build status, Coverage status and Maven central weren't in README.md. Fixes COLLECTIONS-606. Thanks to Vamsi Kavuri. chtompki
Update Improve efficiency of DefaultedMap.get. Fixes COLLECTIONS-602. Thanks to John Mark. kinow
Update Small improvements for generics, conditional statements, and warnings suppressions. Fixes COLLECTIONS-603. Thanks to Artem Konovalov. kinow
Update Update platform from Java 6 to Java 7. Fixes COLLECTIONS-655. ggregory
Fix Web site spelling error: MultiValuedMapeList. Fixes COLLECTIONS-594. Thanks to Javen O'Neal. ggregory
Fix Correction of Javadoc for org.apache.commons.collections4.functors.CatchAndRethrowClosure. Fixes COLLECTIONS-597. Thanks to Enrique. ggregory
Add Add null-safe MapUtils.size(Map<?, ?>) method. Fixes COLLECTIONS-589. Thanks to Gary Gregory. ggregory
Add PatriciaTrie prefixMap clear throws NullPointerException. Fixes COLLECTIONS-586. Thanks to Shailender Bathula, Gary Gregory. ggregory
Add Add class SortedProperties to sort keys. Fixes COLLECTIONS-654. ggregory
Update org.apache.commons.collections4.ListUtils.union(List, List) should pre-allocate result list. Fixes COLLECTIONS-666. Thanks to BELUGA BEHR. ggregory
Update Update org.apache.commons.collections4.CollectionUtils.addAll(Collection<C>, C[]) to addAll(Collection<C>, C...). Fixes COLLECTIONS-669. Thanks to BELUGA BEHR, Gary Gregory. ggregory
Add Add CollectionUtils containsAny method for primitive array: org.apache.commons.collections4.CollectionUtils.containsAny(Collection<?>, T...). Fixes COLLECTIONS-668. Thanks to Gary Gregory. ggregory
Add Synchronized queue wrapper in QueueUtils. Fixes COLLECTIONS-575. Thanks to Guram Savinov, Grzegorz Rożniecki, Bruno P. Kinoshita, Gary Gregory. ggregory
Add Add org.apache.commons.collections4.IteratorUtils.first(Iterator). Fixes COLLECTIONS-670. Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.collections4.IterableUtils.first(Iterable). Fixes COLLECTIONS-671. Thanks to Gary Gregory. ggregory
Fix The verification of unsupported iterator methods is not complete. Fixes COLLECTIONS-678. Thanks to Oscar Luis Vera Pérez. ggregory
Fix ListUtils.partition potential integer overflow. Fixes COLLECTIONS-673. Thanks to John Mark, Stephan Fuhrmann. ggregory

Release 4.1 – 2015-11-28

Type Changes By
Add 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. Fixes COLLECTIONS-508. tn
Update Deprecated various method in "CollectionUtils" in favor of similar methods in the newly introduced "IterableUtils". Fixes COLLECTIONS-551. tn
Update 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. Fixes COLLECTIONS-580. tn
Fix Added validation when de-serializing a "MultiValueMap#ReflectionFactory": only Collection classes are allowed, otherwise an UnsupportedOperationException will be thrown during de-serialization. Fixes COLLECTIONS-580. tn
Add 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. Fixes COLLECTIONS-567. tn
Fix Subclasses of MultiKey did not re-calculate their hashcode after de-serialization. Fixes COLLECTIONS-576. Thanks to Stephan Roch. tn
Add 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. Fixes COLLECTIONS-572. tn
Update All constructors and static factory methods will now throw a "NullPointerException" if a required input argument is null. Previously sometimes a "IllegalArgumentException" was used. Fixes COLLECTIONS-570. tn
Update Deprecated methods "synchronizedCollection(Collection)" and "unmodifiableCollection(Collection)" in class "CollectionUtils", the corresponding methods in "java.util.Collections" should be used instead. Fixes COLLECTIONS-571. tn
Fix "IteratorUtils#collate(...)" methods did not use natural ordering when a null comparator was provided. Fixes COLLECTIONS-566. tn
Add Added support to specify the initial size of a "LRUMap". Fixes COLLECTIONS-557. Thanks to Philippe Mouawad. tn
Add Added decorators for "NavigableSet" interface. Fixes COLLECTIONS-565. tn
Add Added new class "FluentIterable" to support a fluent API for manipulating Iterable instances. Additionally various supporting methods have been added to "IterableUtils" and "IteratorUtils". Fixes COLLECTIONS-464,COLLECTIONS-442. tn
Add Added new "ZippingIterator" and factory methods "IteratorUtils#zippingIterator(...)". Fixes COLLECTIONS-464. tn
Add Added new decorator "SkippingIterator" and factory methods "IteratorUtils#skippingIterator(...)". Fixes COLLECTIONS-464. tn
Add Added method "SetUtils#newIdentityHashSet()" which returns a new identity HashSet using reference-equality instead of object-equality. Fixes COLLECTIONS-556. tn
Update Upgraded minimum java requirement to Java 6 (up from Java 5). Fixes COLLECTIONS-562. tn
Add Added method "LRUMap#get(Object, boolean)" that allows to query the map without affecting the least recently used order. Fixes COLLECTIONS-395. Thanks to David Hawthorne. tn
Fix Changed return type of "ListOrderedSet#remove(int)" from Object to the generic type parameter. Fixes COLLECTIONS-558. Thanks to Felix Rabe. tn
Fix Added clarification to javadoc of "TreeBag#add(Object)" wrt null arguments. Fixes COLLECTIONS-555. Thanks to M Kim. tn
Add Added "toString(...)" methods to newly created "IterableUtils" and existing "IteratorUtils" to get a string representation of an Iterable/Iterator instance similar to "Arrays#toString(...)". Fixes COLLECTIONS-427. Thanks to Gonçalo Marques. tn
Fix Reverted performance improvement for "SetUniqueList#retainAll(Collection)" introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. Fixes COLLECTIONS-427. tn
Fix Reverted performance improvement for "ListOrderedSet#retainAll(Collection)" introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. Fixes COLLECTIONS-426. tn
Fix 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. Fixes COLLECTIONS-530. Thanks to Erik. tn
Fix Documented runtime complexity of "CollectionUtils#removeAll(Collection, Collection). Fixes COLLECTIONS-545. Thanks to Oswaldo Olivo. tn
Fix "AbstractCollectionDecorator" doesn't forward equals and hashCode anymore. Fixes COLLECTIONS-543. tn
Fix Documented runtime complexity of "CollectionUtils#retainAll(Collection, Collection). Fixes COLLECTIONS-544. Thanks to Oswaldo Olivo. tn
Fix "AbstractHashedMap" still inherits from "AbstractMap", contrary to what the class javadoc stated. The inheritance will now be removed in v5.0. Fixes COLLECTIONS-542. tn
Add Changed scope of "CircularFifoQueue#isAtFullCapacity()" to public. Fixes COLLECTIONS-539. Thanks to Guram Savinov. tn
Fix The map returned by "PatriciaTrie#prefixMap()" did not contain all keys that are prefixed by the given search key in some rare cases. Fixes COLLECTIONS-525. Thanks to Zigler Zhang. tn
Add Added new methods "IterableUtils#partition(...)" to partition an input collection into separate output collections based on evaluation of one or more predicates. Fixes COLLECTIONS-511. Thanks to Nathan Blomquist, Brent Worden. tn
Fix Harmonized signature of factory methods for functor-related classes which take a collection as input with their array counterparts. Fixes COLLECTIONS-537. Thanks to Frank Jakop. tn
Fix Added overloaded method "CollectionUtils#get(Enumeration, int)" and simplified code for "CollectionUtils#get(Object, int)". Fixes COLLECTIONS-540. Thanks to Daniel Stewart, Issam El Atif. tn
Fix Improved check for null input in "MapUtils#putAll(Map, Object[])". Fixes COLLECTIONS-536. Thanks to Tagir Valeev. tn
Fix Added clarifying javadoc wrt runtime complexity of "CollectionBag#retainAll". Fixes COLLECTIONS-534. Thanks to Oswaldo Olivo. tn
Add Added methods "removeAll(...)" and "retainAll(...)" to "CollectionUtils" that perform equality checks using the provided "Equator" object instead of "Object#equals()". Fixes COLLECTIONS-529. Thanks to Alexander Muthmann, Dipanjan Laha. tn
Fix Use correct type bounds in "CollectionUtils#isEqualCollection(Collection, Collection, Equator)" to prevent a "ClassCastException" at runtime for invalid inputs. Fixes COLLECTIONS-531. Thanks to Dipanjan Laha. tn
Fix Removed unneeded private method in "PassiveExpiringMap". Fixes COLLECTIONS-523. Thanks to Thiago Andrade. tn
Fix Added clarification to the javadoc of "MapUtils#toProperties(Map)" in case of null keys/values. Fixes COLLECTIONS-516. Thanks to Cyrille Artho. tn
Fix "ListOrderedSet#listOrderedSet(List)" did not remove duplicates from the input list as advertised in the javadoc. Fixes COLLECTIONS-524. Thanks to J Goodfellow. tn
Fix "MultiKeyMap" was throwing a "NullPointerException" for various operations if two key arguments have been used and the second was "null". Fixes COLLECTIONS-521. Thanks to Maxime Nay. tn
Fix Updated code example for "PredicatedList". Fixes COLLECTIONS-522. Thanks to Erik. tn
Fix "TransformingComparator" and "FixedOrderComparator" did not comply with the contract of "Object#equals". Fixes COLLECTIONS-512. Thanks to Cyrille Artho. tn
Fix Fix compilation errors when using source level 1.8 and a recent java 8 compiler. Fixes COLLECTIONS-510. Thanks to Hollis Waite. tn
Fix Clarified javadoc of "CollectionBag" wrt changes from the original Bag interface. Fixes COLLECTIONS-509. tn
Fix Removed wrong type bounds for "ComparatorUtils#chainedComparator(...)". Fixes COLLECTIONS-507. Thanks to Gerson. tn
Fix 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. Fixes COLLECTIONS-506. Thanks to Anthony Communier. tn
Add Added new transformer "IfTransformer" and factory methods "TransformerUtils#ifTransformer(...)" which replace "TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)". Fixes COLLECTIONS-503. Thanks to Josh Cain. tn
Add Added new decorator "BoundedIterator" and factory methods "IteratorUtils#boundedIterator(...)". Fixes COLLECTIONS-471. Thanks to Radford Tam. tn

Release 4.0 – 2013-11-27

Type Changes By
Update 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(). Fixes COLLECTIONS-502. tn
Update 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. Fixes COLLECTIONS-501. tn
Update 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. Fixes COLLECTIONS-500. tn
Update Refactored the test framework for Bag implementations to extend from "AbstractCollectionTest" by decorating the concrete Bag instance with a CollectionBag or CollectionSortedBag. Fixes COLLECTIONS-499. tn
Fix "CollectionBag" will now also respect the contract of the decorated bag in case a null argument is provided to either removeAll or retainAll. Fixes COLLECTIONS-498. tn
Add Added bag decorator "CollectionSortedBag" which decorates a SortedBag to make it comply with the Collection contract. Fixes COLLECTIONS-497. tn
Update "UnmodifiableBoundedCollection" does now also implement the marker interface "Unmodifiable" similar as all other unmodifiable decorators. Fixes COLLECTIONS-496. tn
Fix "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. Fixes COLLECTIONS-495. tn
Update Moved "Equator" interface to base package for consistency. Fixes COLLECTIONS-494. Thanks to Emmanuel Bourg. tn
Add Added "CollectionsUtils#matchesAll(Iterable, Predicate)" to test if all elements of a collection match a given predicate. Fixes COLLECTIONS-488. Thanks to Josh Cain. tn
Fix Accept wildcard input where possible, e.g. in copy-constructors, Unmodifiable* decorators and iterators. Fixes COLLECTIONS-485. Thanks to Hollis Waite. tn
Fix 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. Fixes COLLECTIONS-481. Thanks to Hollis Waite. tn
Update Narrow return type of "BidiMap#values()" to Set as the values are required to be unique. Fixes COLLECTIONS-480. Thanks to Hollis Waite. tn
Fix Fixed conversion of timeout parameters in "PassiveExpiringMap". Fixes COLLECTIONS-475. tn
Fix Exception in "ListOrderedMap#putAll" if map contains null values. Fixes COLLECTIONS-474. Thanks to Ning Chen. sebb
Update Made field "collection" in class "AbstractCollectionDecorator" private and added setter "setCollection(Collection)" with scope protected to set the decorated collection during de-serialization. Fixes COLLECTIONS-473. Thanks to sebb. tn
Fix Improved performance of "AbstractMapBag#containsAll(Collection)" by returning immediately after a difference has been found. Fixes COLLECTIONS-472. Thanks to Adrian Nistor. tn
Update Renamed class "TransformedMap" in package "splitmap" to "TransformedSplitMap" to avoid name clash with similar class in package "map". Fixes COLLECTIONS-470. Thanks to sebb. tn
Add Added bag decorator "CollectionBag" which decorates a bag to make it comply with the Collection contract. Fixes COLLECTIONS-468. tn
Update Replaced "Collection" with "Iterable" for method arguments where applicable. Fixes COLLECTIONS-466. tn
Add Added "PushbackIterator" decorator to support pushback of elements during iteration. Fixes COLLECTIONS-463. Thanks to Andy Seaborne, Claude Warren. tn
Add Added "PeekingIterator" decorator to support one-element lookahead during iteration. Fixes COLLECTIONS-462. Thanks to Andy Seaborne, Claude Warren. tn
Fix Added additional clarification to javadoc of interface "Put" wrt return type of "put(Object, Object)" method. Fixes COLLECTIONS-461. Thanks to Matt Benson, sebb. tn
Update 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()". Fixes COLLECTIONS-460. tn
Update Removed method "setArray(Object)" in class ArrayIterator and method "setArray(Object[])" in class ObjectArrayIterator and made fields array, startIndex and endIndex final. Fixes COLLECTIONS-459. Thanks to sebb. tn
Remove Removed unused class "AbstractUntypedCollectionDecorator<E, D>". Fixes COLLECTIONS-458. sebb
Add Added methods "ListUtils#longestCommonSubsequence(...)" to get the longest common subsequence of arbitrary lists or CharSequences. Fixes COLLECTIONS-456. tn
Update Changed scope of fields to private where appropriate. Fixes COLLECTIONS-455. sebb
Update An iterator over a "Flat3Map#entrySet()" will now return independent Map.Entry objects that will not change anymore when the iterator progresses. Fixes COLLECTIONS-454. tn
Update Several closure and transformer implementations in the functors package will now copy an array as input to their constructor (e.g. ChainedClosure). Fixes COLLECTIONS-453. tn
Update Change base package to org.apache.commons.collections4. Fixes COLLECTIONS-452. tn
Update The constructors for all Utils classes are now private to prevent instantiation. Fixes COLLECTIONS-451. tn
Add Added methods "forAllButLastDo(Collection, Closure)" and "forAllButLastDo(Iterator, Closure)" to class "CollectionUtils". Fixes COLLECTIONS-450. Thanks to J. Moldawski. tn
Fix Tree traversal with a TreeListIterator will not be affected anymore by the removal of an element directly after a call to previous(). Fixes COLLECTIONS-447. Thanks to Jeffrey Barnes. tn
Add Added method "CollectionUtils#isEqualCollection(Collection, Collection, Equator)". Fixes COLLECTIONS-446. Thanks to Matt Lachman. tn
Fix 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. Fixes COLLECTIONS-445. tn
Fix SetUniqueList.set(int, E) now works correctly if the object to be inserted is already placed at the given position. Fixes COLLECTIONS-444. Thanks to Thomas Vahrst, John Vasileff. tn
Fix MultiKeyMap.clone() now correctly calls super.clone(). Fixes COLLECTIONS-441. Thanks to Thomas Vahrst. tn
Add Added "emptyIfNull" methods to classes "CollectionUtils", "ListUtils", "SetUtils" and "MapUtils". Fixes COLLECTIONS-436. Thanks to Arman Sharif. tn
Fix 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. Fixes COLLECTIONS-433. Thanks to Jeffrey Barnes. tn
Update Replaced "Buffer" interface with "java.util.Queue". Kept "CircularFifoQueue" as well as "Predicated", "Transformed" and "Unmodifiable" decorators. Fixes COLLECTIONS-432. tn
Add 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. Fixes COLLECTIONS-429,COLLECTIONS-434. Thanks to Adrian Nistor, Mert Guldur. tn
Fix Fixed performance issue in "SetUniqueList#retainAll" method for large collections. Fixes COLLECTIONS-427. Thanks to Mert Guldur. brentworden
Fix Fixed performance issue in "ListOrderedSet#retainAll" method for large collections. Fixes COLLECTIONS-426. Thanks to Adrian Nistor. brentworden
Fix Improved performance of "ListOrderedMap#remove(Object)" method. Fixes COLLECTIONS-425. Thanks to Adrian Nistor. tn
Update "CompositeSet" does not inherit from "CompositeCollection" anymore. The inner class "SetMutator" has been updated accordingly. Fixes COLLECTIONS-424. Thanks to Michael Pradel. tn
Add Added method "CollectionUtils#permutations(Collection)" and class "PermutationIterator" to generate unordered permutations of a collection. Fixes COLLECTIONS-422. Thanks to Benoit Corne. tn
Fix Update javadoc for "ListUtils#lazyList()" and "ListUtils#fixedSizeList()". Fixes COLLECTIONS-421. Thanks to Benedikt Ritter. tn
Fix Added clarifying javadoc wrt runtime complexity of "AbstractDualBidiMap#retainAll". Fixes COLLECTIONS-419. Thanks to Adrian Nistor. tn
Fix Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#retainAll". Fixes COLLECTIONS-417. Thanks to Adrian Nistor. tn
Fix Added clarifying javadoc wrt runtime complexity of "AbstractLinkedList#removeAll". Fixes COLLECTIONS-415. Thanks to Adrian Nistor. tn
Fix Fixed several compilation issues with older Java 1.6 compilers. Fixes COLLECTIONS-414. tn
Fix Improved performance of "removeAll()" method for sets returned by "DualHashBidiMap#entrySet()". Fixes COLLECTIONS-413. Thanks to Adrian Nistor. tn
Fix Improved performance of "CollectionUtils#subtract" methods. Fixes COLLECTIONS-412. Thanks to Adrian Nistor. tn
Fix Fixed possible "IndexOutOfBoundsException" in "ListOrderedMap#putAll". Fixes COLLECTIONS-411. Thanks to Adrian Nistor. tn
Fix Improved performance of "SetUniqueList#addAll" method. Fixes COLLECTIONS-410. Thanks to Adrian Nistor. tn
Fix Improved performance of "ListOrderedSet#addAll" method. Fixes COLLECTIONS-409. Thanks to Adrian Nistor. tn
Fix Improved performance of "SetUniqueList#removeAll". Fixes COLLECTIONS-408. Thanks to Adrian Nistor. tn
Fix Improved performance of "ListOrderedSet#remove(Object)" in case the object is not contained in the Set. Fixes COLLECTIONS-407. Thanks to Adrian Nistor. tn
Fix Improved performance of "ListUtils#subtract" method. Fixes COLLECTIONS-406. Thanks to Adrian Nistor. tn
Add Added "ListUtils#select" and "ListUtils#selectRejected" methods. Fixes COLLECTIONS-405. Thanks to Adam Dyga. brentworden
Add Added an implementation of Eugene Myers difference algorithm in package o.a.c.c.sequence. Fixes COLLECTIONS-404. Thanks to Jordane Sarda. luc
Fix Added missing null check in "CollectionUtils#addIgnoreNull(Collection, Object)". Fixes COLLECTIONS-400. Thanks to Shin Hwei Tan. tn
Add Added new method "get(int)" to "CircularFifoQueue". Fixes COLLECTIONS-399. Thanks to Sebb. tn
Add Added "LazyIteratorChain" iterator. Fixes COLLECTIONS-396. Thanks to Jeff Rodriguez. tn
Add Added "ListUtils#partition" method to split a List into consecutive sublists. Fixes COLLECTIONS-393. Thanks to Chris Shayan. tn
Fix Fixed javadoc for "MapUtils#toProperties(Map)". Fixes COLLECTIONS-391. Thanks to Shin Hwei Tan. tn
Fix Clarified javadoc for "TransformerUtils#mapTransformer" for null input. Fixes COLLECTIONS-389. Thanks to Shin Hwei Tan. tn
Fix Clarified javadoc for "FactoryUtils#prototypeFactory" for null input. Fixes COLLECTIONS-388. Thanks to Shin Hwei Tan. tn
Fix Fixed inconsistent javadoc for "MapUtils#synchronizedMap(Map)". Fixes COLLECTIONS-384. Thanks to Shin Hwei Tan. ggregory
Add Added "CollectionUtils#forAllDo" implementation which takes an "Iterator" as input. Fixes COLLECTIONS-383. Thanks to Adrian Cumiskey. tn
Update Change maven coordinates to "org.apache.commons.commons-collections4". Fixes COLLECTIONS-382. Thanks to Olivier Lamy. tn
Update Move the project structure to a standard maven layout. Fixes COLLECTIONS-381. Thanks to Olivier Lamy. sebb
Fix Fixed infinite loop when calling "UnmodifiableBoundedCollection#unmodifiableBoundedCollection()". Fixes COLLECTIONS-380. Thanks to Dave Brosius. tn
Fix Fixed javadoc for several methods wrt expected NullPointerExceptions. Fixes COLLECTIONS-379. Thanks to Shin Hwei Tan. tn
Add Added method "ListUtils#defaultIfNull(List, List)". Fixes COLLECTIONS-375. Thanks to Ivan Hristov. tn
Update TransformingComparator now supports different types for its input/output values. Fixes COLLECTIONS-372. tn
Fix "DualTreeBidiMap" now uses the correct comparator for the reverse map during de-serialization. Fixes COLLECTIONS-364. sebb
Fix "TransformedMap" in the package "splitmap" can now be serialized. Fixes COLLECTIONS-363. sebb
Update "CollectionUtils#filter(Iterable, Predicate)" will now return whether the collection has been modified. Fixes COLLECTIONS-362. Thanks to Jean-Noel Rouvignac. brentworden
Add Add method "CollectionUtils#filterInverse(Iterable, Predicate)". Fixes COLLECTIONS-361. Thanks to Jean-Noel Rouvignac. tn
Fix "FilterListIterator#hasNext" does not throw a NullPointerException anymore to comply to the Java iterator specification. Fixes COLLECTIONS-360. Thanks to Sai Zhang. jochen
Fix "ListUtils#intersection(List, List)" will now also work correctly if there are duplicate elements in the provided lists. Fixes COLLECTIONS-359. Thanks to Mark Shead. bayard
Fix "AbstractCollectionDecorator" will now use internally "decorated()" to access the decorated collection. Fixes COLLECTIONS-352. Thanks to Adam Gent. bayard
Remove Removed features which are now supported by the JDK. Fixes COLLECTIONS-351. Thanks to Henri Yandell. bayard
Fix Removed debug output in "MapUtils#getNumber(Map)". Fixes COLLECTIONS-350. Thanks to Michael Akerman. bayard
Fix Fixed javadoc for all "transformedXXX(XXX)" methods in the respective Utils classes to clarify that existing objects in the list are not transformed. Fixes COLLECTIONS-348. Thanks to Paul Benedict. brentworden
Fix Singleton classes in package "functors" are now correctly de-serialized. Fixes COLLECTIONS-343. Thanks to Goran Hacek. mbenson
Update "NOPClosure" is now a final class. Fixes COLLECTIONS-341. Thanks to Goran Hacek. mbenson
Fix Removed broken methods "equals(Object)" and "hashCode()" in class "NOPClosure". Fixes COLLECTIONS-340. Thanks to Goran Hacek. mbenson
Fix Simplified exceptions as the cause is available from the parent. Fixes COLLECTIONS-336. Thanks to sebb. bayard
Fix Fixed cache assignment for "TreeBidiMap#entrySet". Fixes COLLECTIONS-335. Thanks to sebb. jochen
Fix Synchronized access to lock in "StaticBucketMap#size()". Fixes COLLECTIONS-334. Thanks to sebb. jochen
Fix Added clarification to javadoc of "ListOrderedMap" that "IdentityMap" and "CaseInsensitiveMap" are not supported. Fixes COLLECTIONS-332. Thanks to Tom Parker. jochen
Fix Improve javadoc of "CollatingIterator" wrt the used "Comparator" and throw a NullPointerException in "CollatingIterator#least" if no comparator is set. Fixes COLLECTIONS-331. Thanks to Michael Krkoska. jochen
Fix "LRUMap#keySet()#remove(Object)" will not throw a "ConcurrentModificationException" anymore. Fixes COLLECTIONS-330. Thanks to Joerg Schaible. mbenson
Fix Improved performance of "ListUtils#intersection(List, List)". Fixes COLLECTIONS-328. Thanks to Thomas Rogan, Jilles van Gurp. bayard
Add Added serialVersionUID fields for "CompositeCollection", "CompositeSet", "EmptyMapMutator", "EmptySetMutator". Fixes COLLECTIONS-327. Thanks to sebb. brentworden
Update Fields transformer and decorated in class "TransformingComparator" are now final. Fixes COLLECTIONS-324. Thanks to sebb. tn
Fix Changed behavior of "CaseInsensitiveMap" constructor to be compliant with "HashMap" in case the initial capacity is set to zero. Fixes COLLECTIONS-323. Thanks to Maarten Brak. jochen
Add Added NodeListIterator and convenience methods in IteratorUtils to iterate over a org.w3c.dom.NodeList. Fixes COLLECTIONS-322. Thanks to Thomas Vahrst. tn
Fix Improved performance of "StaticBucketMap#putAll(Map)" by iterating over the entry set. Fixes COLLECTIONS-320. Thanks to sebb. bayard
Fix Avoid redundant null check in "IteratorUtils#getIterator(Object)". Fixes COLLECTIONS-319. Thanks to sebb. bayard
Fix Use a private method to populate the object in "AbstractHashedMap(Map)". Fixes COLLECTIONS-317. Thanks to sebb. bayard
Fix Fixed javadoc of "LRUMap" wrt to the maxSize parameter of the constructor. Fixes COLLECTIONS-316. Thanks to ori. bayard
Add Added new abstract class "CatchAndRethrowClosure" that re-throws any checked exception as unchecked "FunctorException". Fixes COLLECTIONS-313. Thanks to David J. M. Karlsen. brentworden
Fix Use of final keyword where applicable, minor performance improvements by properly initializing the capacity of newly created collections when known in advance. Fixes COLLECTIONS-312. Thanks to Peter Lawrey, Gary Gregory. tn
Update "SetUniqueList#subList()" will now return an unmodifiable list as changes to it may invalidate the parent list. Fixes COLLECTIONS-307. Thanks to Christian Semrau, Thomas Vahrst. tn
Fix "SetUniqueList#subList()#contains(Object)" will now correctly check the subList rather than the parent list. Fixes COLLECTIONS-307. Thanks to Christian Semrau. bayard
Add Added method "CollectionUtils#subtract(Iterable, Iterable, Predicate)". Fixes COLLECTIONS-306. Thanks to Chris Shayan. brentworden
Fix "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint. Fixes COLLECTIONS-304. Thanks to Rafał Figas,Bjorn Townsend. bayard
Fix Improved javadoc for "Unmodifiable*" classes wrt behavior when the users tries to modify the collection. Fixes COLLECTIONS-303. Thanks to Emmanuel Bourg. bayard
Update Calling "CollectionUtils#sizeIsEmpty(null)" will now return true. Fixes COLLECTIONS-298. Thanks to Benjamin Bentmann. bayard
Add Added methods "CollectionUtils#collate(...)" to merge two sorted Collections into a sorted List using the standard O(n) merge algorithm. Fixes COLLECTIONS-296. Thanks to Julius Davies. tn
Fix "CaseInsensitiveMap" will now convert input strings to lower-case in a locale-independant manner. Fixes COLLECTIONS-294. Thanks to Benjamin Bentmann. bayard
Add Added support for using custom "Equator" objects in "EqualPredicate". Fixes COLLECTIONS-293. Thanks to Stephen Kestle. tn
Add Added method "CollatingIterator#getIteratorIndex()". Fixes COLLECTIONS-289. Thanks to Fredrik Kjellberg. bayard
Fix Fixed javadoc for "ListUtils#transformedList(List)" to clarify that existing objects in the list are not transformed. Fixes COLLECTIONS-256,COLLECTIONS-288. Thanks to Paul Benedict. bayard
Add Added method "CollectionUtils#extractSingleton(Collection)". Fixes COLLECTIONS-286. Thanks to Geoffrey De Smet. mbenson
Add Added serialization support for "TreeBidiMap". Fixes COLLECTIONS-285. Thanks to Christian Gruenberg. tn
Update The predicate that rejected an object to be added to a "PredicatedCollection" is now contained in the respective exception message. Fixes COLLECTIONS-280. Thanks to Chris Lewis. bayard
Add Added "IndexedCollection" collection decorator which provides a map-like view on an existing collection. Fixes COLLECTIONS-275. Thanks to Stephen Kestle. tn
Add Added serialization support for "FixedOrderComparator" and "TransformingComparator". Fixes COLLECTIONS-272. Thanks to Chaitanya Mutyala. tn
Fix "MultiKey" will now be correctly serialized/de-serialized. Fixes COLLECTIONS-266. Thanks to Joerg Schaible. bayard
Update "TreeBag" will now only accept "Comparable" objects as input when used with natural ordering. Fixes COLLECTIONS-265. Thanks to David Saff. bayard
Add Added methods "MapUtils#populateMap(MultiMap, ...)" to support also "MultiMap" instances as input. Fixes COLLECTIONS-263. Thanks to John Hunsley. tn
Fix Fixed javadoc for methods "firstKey()" and "lastKey()" in class "AbstractLinkedMap". Fixes COLLECTIONS-262. Thanks to Lisen Mu. bayard
Fix "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. Fixes COLLECTIONS-261. Thanks to ori. bayard
Add Added constructor "TransformingComparator(Transformer)". Fixes COLLECTIONS-260. Thanks to Stephen Kestle. mbenson
Add Added "DualLinkedHashBidiMap" bidi map implementation. Fixes COLLECTIONS-258. Thanks to Nathan Blomquist. tn
Fix Removed unused variables in "TreeBidiMap". Fixes COLLECTIONS-255. Thanks to Henri Yandell. mbenson
Update The static factory methods have been renamed from "getInstance()" to a camel-case version of the class name, e.g. "truePredicate()" for class "TruePredicate". Fixes COLLECTIONS-251,COLLECTIONS-321. Thanks to Stephen Kestle. mbenson
Fix "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the provided index. Fixes COLLECTIONS-249. Thanks to Joe Kelly. bayard
Add Added "Equator" interface. Fixes COLLECTIONS-242. skestle
Add Added "PassiveExpiringMap" map decorator. Fixes COLLECTIONS-241. Thanks to Elifarley Callado Coelho. brentworden
Update "MultiValueMap" is now serializable. Fixes COLLECTIONS-240. Thanks to Wouter de Vaal. bayard
Add 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. Fixes COLLECTIONS-237. Thanks to Nils Kaiser, Alan Mehlo. tn
Add Added method "ListUtils#indexOf(List, Predicate)". Fixes COLLECTIONS-235. Thanks to Nathan Egge. bayard
Fix Fixed several unit tests which were using parameters to "assertEquals(...)" in wrong order. Fixes COLLECTIONS-232. Thanks to Mark Hindess. bayard
Update Return concrete class in static factory methods instead of base class interface (except for Unmodifiable decorators). Fixes COLLECTIONS-231. Thanks to Torsten Curdt. tn
Update "CollectionUtils#size(Collection)" now returns 0 when called with null as input. Fixes COLLECTIONS-230,COLLECTIONS-297,COLLECTIONS-318. Thanks to Stepan Koltsov,sebb. bayard
Remove Removed deprecated classes and methods. Fixes COLLECTIONS-229. scolebourne
Fix "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)" now correctly return if the map has changed by this operation. Fixes COLLECTIONS-228. scolebourne
Add Added method "ListOrderedMap#putAll(int, Map)". Fixes COLLECTIONS-226. Thanks to Vasily Ivanov. bayard
Add Added new "Trie" interface with a first concrete implementation "PatriciaTrie" together with decorators "Unmodifiable" and "Synchronized". Fixes COLLECTIONS-225. Thanks to Sam Berlin, Roger Kapsi. tn
Update "CollectionUtils#addAll(...)" methods now return if the collection has been changed by this operation. Fixes COLLECTIONS-223. Thanks to Vasily Ivanov. bayard
Update "CompositeCollection", "CompositeMap" and "CompositeSet" are now serializable. Fixes COLLECTIONS-221. Thanks to Pal Denes. bayard
Fix "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll". Fixes COLLECTIONS-219. Thanks to Tom Leccese. scolebourne
Update The "CollectionUtils#select(Collection, Predicate, Collection)" method will now return the output collection. Fixes COLLECTIONS-218. skestle
Fix Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now correctly set the value for the current entry. Fixes COLLECTIONS-217. Thanks to Matt Bishop. scolebourne
Fix "MultiKey#toString()" will now use "Arrays#toString(List)". Fixes COLLECTIONS-216. Thanks to Hendrik Maryns. scolebourne
Add Added support for resettable iterators in "IteratorIterable". Fixes COLLECTIONS-213. Thanks to Dusan Chromy. brentworden
Add Added methods "MapUtils#populateMap(Map, Iterable, Transformer, ...)". Fixes COLLECTIONS-194. Thanks to Dave Meikle. bayard
Update "CollectionUtils#forAllDo(Collection, Closure)" now returns the provided closure. Fixes COLLECTIONS-182. Thanks to Jim Cakalic. mbenson
Update Make generic versions of all classes in collections. Fixes COLLECTIONS-110,COLLECTIONS-243,COLLECTIONS-245,COLLECTIONS-247, COLLECTIONS-253,COLLECTIONS-273,COLLECTIONS-282. multiple
Add Added class "ComparatorPredicate". Fixes COLLECTIONS-8. Thanks to Rune Peter Bjørnstad. brentworden

Release 3.2.2 – 2015-11-15

Type Changes By
Update 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. Fixes COLLECTIONS-580. tn
Fix "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. Fixes COLLECTIONS-538. Thanks to Trejkaz. tn
Fix Tree traversal with a TreeListIterator will not be affected anymore by the removal of an element directly after a call to previous(). Fixes COLLECTIONS-447. Thanks to Jeffrey Barnes. tn
Fix SetUniqueList.set(int, Object) now works correctly if the object to be inserted is already placed at the given position. Fixes COLLECTIONS-444. Thanks to Thomas Vahrst, John Vasileff. tn
Fix Removed debug output in "MapUtils#getNumber(Map)". Fixes COLLECTIONS-350. Thanks to Michael Akerman. bayard
Fix Fixed cache assignment for "TreeBidiMap#entrySet". Fixes COLLECTIONS-335. Thanks to sebb. jochen
Fix Synchronized access to lock in "StaticBucketMap#size()". Fixes COLLECTIONS-334. Thanks to sebb. jochen
Fix "SetUniqueList#subList()#contains(Object)" will now correctly check the subList rather than the parent list. Fixes COLLECTIONS-307. Thanks to Christian Semrau. bayard
Fix "SetUniqueList#set(int, Object)" will now correctly enforce the uniqueness constraint. Fixes COLLECTIONS-304. Thanks to Rafał Figas,Bjorn Townsend. bayard
Fix "CaseInsensitiveMap" will now convert input strings to lower-case in a locale-independent manner. Fixes COLLECTIONS-294. Thanks to Benjamin Bentmann. bayard
Fix "MultiKey" will now be correctly serialized/de-serialized. Fixes COLLECTIONS-266. Thanks to Joerg Schaible. bayard
Fix "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. Fixes COLLECTIONS-261. Thanks to ori. bayard
Fix "SetUniqueList.addAll(int, Collection)" now correctly add the collection at the provided index. Fixes COLLECTIONS-249. Thanks to Joe Kelly. bayard
Fix "MultiValueMap#put(Object, Object)" and "MultiValueMap#putAll(Object, Collection)" now correctly return if the map has changed by this operation. Fixes COLLECTIONS-228. scolebourne
Fix "CollectionUtils#removeAll" wrongly called "ListUtils#retainAll". Fixes COLLECTIONS-219. Thanks to Tom Leccese. scolebourne
Fix Calling "setValue(Object)" on any Entry returned by a "Flat3Map" will now correctly set the value for the current entry. Fixes COLLECTIONS-217. Thanks to Matt Bishop. scolebourne