Apache Commons logo Commons Collections

Apache Commons Collections Release Notes

Release History

Version Date Description
4.5.0-M1 2024-03-31 This milestone release requires Java 8 and adds the package `org.apache.commons.collections4.bloomfilter` for review.
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.5.0-M1 – 2024-03-31

Type Changes By
Fix Use assertThrows V2. Fixes COLLECTIONS-780. Thanks to Arturo Bernal. kinow
Fix Use assertThrows. Fixes COLLECTIONS-778. Thanks to Arturo Bernal. kinow
Fix Fix flaky AbstractMultiValuedMapTest#testToString. Fixes COLLECTIONS-771. Thanks to Xin Tong. kinow
Fix Fix flaky UnmodifiableMultiValuedMapTest. Fixes COLLECTIONS-769. Thanks to Xin (Cynthia) Tong. kinow
Fix Refine javadoc and fix typos. Fixes COLLECTIONS-764. Thanks to XenoAmess. kinow
Fix Update Javadoc of ListIteratorWrapper#remove. Fixes COLLECTIONS-765. Thanks to Tobias Kiecker. kinow
Fix Add hashCode method to CollectionUtils that supports an equator parameter. Fixes COLLECTIONS-708. Thanks to dota17. kinow
Fix Fix checkstyle issues regarding missing newline at end of file, and CRLF vs LF. Fixes COLLECTIONS-759. kinow
Fix A potential misleading comment #82. Fixes COLLECTIONS-727. Thanks to XiangzheXu, XZ-X. ggregory
Fix Using existing class in example given in Javadocs. #85. Fixes COLLECTIONS-679. Thanks to David Mollitor, Mikko Maunu. ggregory
Fix Add test cases to IteratorUtilsTest #86. Fixes COLLECTIONS-729. Thanks to dota17. ggregory
Fix Fix typos in release notes and Javadoc for AbstractHashedMap and AbstractHashedMapTest #88. Thanks to dota17. ggregory
Fix Add missing @throws comment for SwitchTransformer.switchTransformer. #124. Fixes COLLECTIONS-740. Thanks to Pengyu Nie. ggregory
Fix Fix inconsistent @throws comments in DefaultedMap #123. Fixes COLLECTIONS-739. Thanks to Pengyu Nie. ggregory
Fix Fix links to release notes and update contents for 4.4 #127. Thanks to Dominik Stadler. ggregory
Fix Fix checkstyle syntax (was scope, is now accessModifiers) via PR #235. Thanks to Jin Xu. kinow
Fix Fix PassiveExpiringMap documentation for methods that involve accessing the entire map. Fixes COLLECTIONS-786. Thanks to vandrewskis. kinow
Fix SortedProperties should sort entrySet() as well as keys() #256. Thanks to Michael Berry. ggregory
Fix SetUniqueList.createSetBasedOnList doesn't add list elements to return value. Fixes COLLECTIONS-796. Thanks to Clemens Kurz. kinow
Fix UnmodifiableNavigableSet can be modified by pollFirst() and pollLast(). Fixes COLLECTIONS-799. Thanks to Stefano Cordio. kinow
Fix Use Java 8 and method reference. #274. Thanks to Arturo Bernal. ggregory
Fix Use Java 8 features #228. Fixes COLLECTIONS-788. Thanks to Arturo Bernal. ggregory
Fix Upgraded org.junit.Test to org.junit.jupiter.api.Test #295, #304. Fixes COLLECTIONS-807. Thanks to Pradeesh Kumar, samabcde. ggregory
Fix ReferenceMap iterator remove violates contract #300. Fixes COLLECTIONS-802. Thanks to samabcde, Ben Manes. kinow
Fix Fix flaky EmptyPropertiesTest#testSave. Fixes COLLECTIONS-812. Thanks to Ng Tsz Sum. kinow
Fix Use java.lang.Objects#equals; eliminate a couple of nulls #307. Thanks to Steve Bosman. ggregory
Fix CollectionUtils.removeAll() not throwing NPE #340. Fixes COLLECTIONS-814. Thanks to angusdev. kinow
Fix Fix minor typos #323 Thanks to Marc Wrobel. ggregory
Fix AbstractReferenceMap.SoftRef implements hashCode() but not equals(). Thanks to Gary Gregory. ggregory
Fix AbstractReferenceMap.WeakRef implements hashCode() but not equals(). Thanks to Gary Gregory. ggregory
Fix Use Java style array decelerations #362. Thanks to Arturo Bernal. ggregory
Fix Remove use of JUnit4 junit.framework.Test class #371. Fixes COLLECTIONS-806. Thanks to Piyush Sagar. ggregory
Fix Migrate Map tests to JUnit 5 assertions #391. Fixes COLLECTIONS-839. Thanks to Sam Ng, Gary Gregory, Bruno P. Kinoshita. ggregory
Fix Fix links in javadoc and documentations #325. Fixes COLLECTIONS-835. Thanks to Marc Wrobel. kinow
Fix Correct test of Collection toArray(Object[]) vs toArray() to optionally ignore array order. Ordering is not specified for some collections such as Bags. Thanks to Partha Protim Paul. aherbert
Fix Correct test of BidiMap to optionally ignore testing the key set matches the values order. Ordering is not specified for some BidiMaps such as DualHashBidiMaps. Fixes COLLECTIONS-836. Thanks to Anant Dahiya. aherbert
Fix Return 0 immediately if the given iterable is null in IterableUtils#size. Update tests. Fixes COLLECTIONS-737. Thanks to Prodigysov. kinow
Fix JavaDoc for FixedSizeList should warn that modifying underlying list is still allowed and is not prevented. Fixes COLLECTIONS-697. Thanks to Ranjan George. eax
Fix Fill in some map test cases #104. Thanks to dota17. ggregory
Fix Remove the redundant assertNull in IterableUtilsTest.find and update Javadocs. Fixes COLLECTIONS-738. Thanks to Pengyu Nie. kinow
Fix Simplify two remove-if loops #77. Fixes COLLECTIONS-724. Thanks to Eitan Adler. ggregory
Fix Fix inconsistent @throws comments in ListOrderedSet #125. Thanks to Chen. ggregory
Fix Update size to capacity for GrowthList #90. Fixes COLLECTIONS-704. Thanks to dota17. ggregory
Fix TransformedSortedBagTest should work with TransformedSortedBag, not TransformedBag #98. Thanks to dota17. ggregory
Fix Remove the parentheses in the error message in CircularFifoQueue #107. Thanks to dota17. ggregory
Fix MultiKey.getKeys class cast exception. Fixes COLLECTIONS-747. Thanks to Gary Gregory, Walter Laan. ggregory
Fix Use newline at end of file, and convert to Unix (LF instead of CRLF) fixing checkstyle #147. Fixes COLLECTIONS-759. Thanks to Bruno P. Kinoshita. ggregory
Fix Fixed the typo and deal the NPE with Objects.requireNonNull #118. Thanks to Chen. ggregory
Fix Javadoc BidiMap classes #146. Fixes COLLECTIONS-757. Thanks to Chen. ggregory
Fix Assert ensureCapacity #198. Fixes COLLECTIONS-773. Thanks to Martin Monperrus. ggregory
Fix Fix flaky CollectionUtilsTest.getFromMap() #200. Fixes COLLECTIONS-775. Thanks to Xin Tong, Bruno P. Kinoshita, Gary Gregory. ggregory
Fix Minor Improvements #203, #208. Thanks to Arturo Bernal. ggregory
Fix Fix typo erroring -> erring #202. Thanks to EruDev. ggregory
Fix Encountered an IllegalStateException while traversing with Flat3Map.entrySet(). #115. Fixes COLLECTIONS-734. Thanks to Chen. ggregory
Fix Better NPE messages in CollectionUtils with Objects.requireNonNull #117. Thanks to Chen, Bruno P. Kinoshita, Gary Gregory, Michael Osipov. ggregory
Fix Improve MapUtils with the null checks, add JUnit for it and add Javadoc for the parameter indent. #126. Thanks to Chen. ggregory
Fix Simplify Assertion. Fixes COLLECTIONS-793. Thanks to Arturo Bernal. kinow
Fix [StepSecurity] ci: Harden GitHub Actions #401. Thanks to step-security-bot, Gary Gregory. ggregory
Fix Fix punctuation and minor Javadoc issues #409. Thanks to Martin Wiesner, Bruno P. Kinoshita, Gary Gregory. ggregory
Fix Deprecate IterableUtils 0-argument constructor. Thanks to Gary Gregory. ggregory
Fix Tests in org.apache.commons.collections4.multimap should not depend on map iteration order, see also #429. Fixes COLLECTIONS-850. Thanks to Gary Gregory, Anirudh Madhavan. ggregory
Fix Reimplement FixedOrderComparator#equals() and hashCode(), see also #392. Fixes COLLECTIONS-850. Thanks to Gary Gregory, Saurabh Rahate. ggregory
Add Implement Layered Bloom filter #402. Fixes COLLECTIONS-843. Thanks to Claude Warren, Alex Herbert, Gary Gregory. ggregory
Add Let org.apache.commons.collections4.properties.[Sorted]PropertiesFactory accept XML input. Fixes COLLECTIONS-748. Thanks to Gary Gregory. ggregory
Add Add private constructor to ArrayUtils; better Javadocs, #195. Fixes COLLECTIONS-772. Thanks to Arturo Bernal, Alex Herbert, Gary Gregory, Bruno P. Kinoshita. ggregory
Add Add tests for MapUtils. Fixes COLLECTIONS-760. Thanks to Isira Seneviratne. kinow
Add Test subMap and tailMap #94. Thanks to dota17. ggregory
Add Add junit for add, remove, setCount and entrySet in the UnmodifiableMultiSetTest #95. Thanks to dota17. ggregory
Add Add two test cases in UnmodifiableQueueTest #96. Thanks to dota17. ggregory
Add Update two test cases in AbstractMultiValuedMapTest testPutAll_map1 testPutAll_map2 #97. Thanks to dota17. ggregory
Add Add a test case for AbstractMultiValuedMapTest testToString() #100. Thanks to dota17. ggregory
Add Add a test case AbstractMultiValuedMapTest#testMultiValuedMapIterator() #108. Thanks to dota17. ggregory
Add Add junit for getWithNull and subList in LazyListTest; #103. Thanks to dota17. ggregory
Add Add test cases to ArrayListValuedHashMapTest; #106. Thanks to dota17. ggregory
Add Add test cases in UnmodifiableMultiValuedMapTest; #102. Thanks to dota17. ggregory
Add Add CollectionUtils removeRange, removeCount #91. Fixes COLLECTIONS-674. Thanks to dota17. ggregory
Add Add ListUtils.getFirst() and getLast(). Thanks to Gary Gregory. ggregory
Add Add singleton ObjectToStringComparator.INSTANCE. Thanks to Gary Gregory. ggregory
Add Add github/codeql-action. ggregory
Add Add Guava testlib tests. Fixes COLLECTIONS-811. Thanks to Ben Manes. kinow
Add Add BloomFilter contribution. Fixes COLLECTIONS-728. Thanks to Claude Warren. ggregory
Add Add lambdas function to provide default values in MapUtils #81. Fixes COLLECTIONS-726. Thanks to liuhaozzu, Gary Gregory. ggregory
Add Add three test cases in UnmodifiableQueueTest #105. Thanks to dota17. ggregory
Add Add org.apache.commons.collections4.EnumerationUtils.asIterable(Enumeration). Fixes COLLECTIONS-744. Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.collections4.properties.PropertiesFactory.EMPTY_PROPERTIES. Fixes COLLECTIONS-746. Thanks to Gary Gregory. ggregory
Add Add PropertiesFactory. Fixes COLLECTIONS-746. Thanks to Gary Gregory. ggregory
Add Add org.apache.commons.collections4.properties.OrderedProperties and OrderedPropertiesFactory. Thanks to Gary Gregory. ggregory
Add Make AbstractPatriciaTrie public #407. Thanks to Vadim, Claude Warren, Gary Gregory, Alex Herbert. ggregory
Add Add test cases for indexOf and contains method of ArrayUtils class #215. Thanks to Ajay Kumar Jha, Bruno P. Kinoshita, Claude Warren. ggregory
Add Add Maven property project.build.outputTimestamp for build reproducibility. Thanks to Gary Gregory. ggregory
Update Bump org.easymock:easymock from 4.0.2 to 5.2.0 #352, #355, #375, #414. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump actions/cache. Thanks to Dependabot, Gary Gregory. kinow
Update Bump actions/setup-java. Thanks to Dependabot, Gary Gregory. kinow
Update Bump actions/checkout. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump codecov/codecov-action. Thanks to Dependabot. kinow
Update Bump Apache commons-parent from 48 to 67. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump Jacoco from 0.8.4 to 0.8.8. Thanks to Gary Gregory. ggregory
Update Bump tests from Apache Commons Lang 3.9 to 3.11. Thanks to Gary Gregory. ggregory
Update Bump maven-checkstyle-plugin 3.1.0 to 3.2.1 #379. Thanks to Gary Gregory. ggregory
Update Bump checkstyle from 8.29 to 9.3. Thanks to Gary Gregory. ggregory
Update Bump to JUnit v5.6.2 #136. Fixes COLLECTIONS-754. Thanks to John Patrick. ggregory
Update Migrate JUnit 4.12 to 5.9.1 #324, #338. Fixes COLLECTIONS-777. Thanks to John Patrick, Gary Gregory, Dependabot. ggregory
Update Bump Hamcrest to 2.2. Fixes COLLECTIONS-753. Thanks to John Patrick. ggregory
Update Remove deprecated sudo setting. #161. Thanks to dengliming. ggregory
Update Bump tests from commons-io:commons-io 2.6 to 2.16.0 #180, #469. Thanks to Gary Gregory. ggregory
Update Bump maven-pmd-plugin from 3.12.0 to 3.19.0 #167, #196, #253, #311, #334. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump optional commons-codec:commons-codec from 1.14 to 1.16.1. Thanks to Gary Gregory. ggregory
Update Bump commons.junit.version from 5.6.2 to 5.8.2 #181 #213 #236 #252 #254 #268. Thanks to Dependabot. ggregory
Update Bump maven-antrun-plugin from 1.8 to 3.1.0 #170, #303. Fixes COLLECTIONS-774. Thanks to Dependabot. ggregory
Update Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #211. Thanks to Dependabot. kinow
Update Migrate assert to Assertions #209. Fixes COLLECTIONS-779. Thanks to Arturo Bernal, Gary Gregory. ggregory
Update Add and use CollectionUtils.INDEX_NOT_FOUND constant. Fixes COLLECTIONS-781. Thanks to Arturo Bernal, Gary Gregory. ggregory
Update Bump commons-lang3 from 3.11 to 3.14.0. Thanks to Dependabot, Gary Gregory. kinow
Update Add new variables to oac.collections4.CollectionUtils and use them in the code base. Fixes COLLECTIONS-785. Thanks to Arturo Bernal. kinow
Update Bump easymock from 4.2 to 4.3 #226. Thanks to Dependabot. kinow
Update Bump maven-pmd-plugin from 3.15.0 to 3.16.0 #286. Thanks to Dependabot. ggregory
Update Bump commons-parent from 52 to 58 #299, #368, #373, #393. Thanks to Dependabot, Gary Gregory. kinow
Update Bump japicmp from 0.15.4 to 0.16.0. Thanks to Dependabot. kinow
Update Bump pmd from 6.46.0 to 6.52.0 #318, #327, #333, #347. Thanks to Dependabot, Gary Gregory. kinow
Update Bump guava-testlib from 31.1-jre to 33.1.0-jre #394, #395, #404, #405, #411, #423, #438, #462. Thanks to Dependabot. ggregory

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 an 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 an 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 user 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-independent 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