Apache Commons Collections 4.6.0 Release Notes
----------------------------------------------

The Apache Commons Collections team is pleased to announce the release of Apache Commons Collections 4.6.0.

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

This is a feature and maintenance release. Java 8 or later is required.

Changes in this version
-----------------------

New features
------------

* Add generics to UnmodifiableIterator for the wrapped type. Thanks to Gary Gregory. 
* Add a Maven benchmark profile for JMH. Thanks to Gary Gregory. 
* Add a Maven benchmark profile for JMH. Thanks to Gary Gregory. 
* COLLECTIONS-893:  Add SortedMultiSet interface, TreeMultiSet implementation, sorted multiset decorators, and MultiSetUtils factory methods, giving MultiSet feature parity with SortedBag/TreeBag. Thanks to Paul King. 
* COLLECTIONS-893:  Add MultiSetUtils.containsOccurrences/removeOccurrences/retainOccurrences providing Bag's cardinality-respecting semantics under explicit names, and Bag-to-MultiSet migration notes in the Bag javadoc. Thanks to Paul King. 
* Add IterableUtils.sumSizes(Iterable<? extends Collection<E>>). Thanks to Gary Gregory. 

Fixed Bugs
----------

* COLLECTIONS-776:  Wrapping PassiveExpiringMap in Collections.synchronizedMap breaks expiration. Thanks to Gary Gregory. 
* org.apache.commons.collections4.map.AbstractReferenceMap.ReferenceEntry.toReference(ReferenceStrength, T, int) now throws IllegalArgumentException instead of Error. Thanks to Gary Gregory. 
* Remove deprecation annotation of org.apache.commons.collections4.Factory; this will be deprecated in 5.0 in favor of java.util.function.Supplier. Thanks to Eric Hubert, Gary Gregory. 
* Remove deprecation annotation of org.apache.commons.collections4.Predicate; this will be deprecated in 5.0 in favor of java.util.function.Predicate. Thanks to Eric Hubert, Gary Gregory. 
* Remove deprecation annotation of org.apache.commons.collections4.Transformer; this will be deprecated in 5.0 in favor of java.util.function.Function. Thanks to Eric Hubert, Gary Gregory. 
* Remove deprecation annotation of org.apache.commons.collections4.Closure; this will be deprecated in 5.0 in favor of java.util.function.Consumer. Thanks to Eric Hubert, Gary Gregory. 
* COLLECTIONS-874:  MapUtils.getLongValue(Map, K, Function) returns a byte instead of a long. Thanks to Sebastian Götz, Gary Gregory. 
* MapUtils.getIntValue(Map, K, Function) returns a byte instead of an int. Thanks to Naveed Khan, Gary Gregory. 
* Fix exception message in org.apache.commons.collections4.functors.FunctorUtils.validate(Consumer...) Thanks to Gary Gregory. 
* Fix exception message in org.apache.commons.collections4.iterators.UnmodifiableIterator.remove() to match java.util.Iterator.remove(). Thanks to Gary Gregory. 
* COLLECTIONS-838:  Calling SetUtils.union on multiple instances of SetView causes JVM to hang Thanks to Piotr P. Karwasz, Joerg Budischewski. 
* COLLECTIONS-722:  Improve IteratorUtils.chainedIterator() performance. Thanks to Piotr P. Karwasz, Joerg Budischewski. 
* Fix UselessOverridingMethod in org.apache.commons.collections4.properties.PropertiesFactory. Thanks to Gary Gregory, PMD. 
* COLLECTIONS-693:  OrderedProperties.stringPropertyNames() returns an unordered Set. Thanks to Adam Rauch, Gary Gregory. 
* Fix SortedProperties.keySet() returned an unsorted Set. Thanks to Gary Gregory. 
* Fix SortedProperties.propertyNames() returned an unsorted Enumeration. Thanks to Gary Gregory. 
* Fix SortedProperties.stringPropertyNames() returned an unsorted Set. Thanks to Gary Gregory. 
* Fix SortedProperties.forEach() called its consumer out of order. Thanks to Gary Gregory. 
* Fix Apache RAT plugin console warnings. Thanks to Gary Gregory. 
* Add MultiValuedMap.inverted() #665. Thanks to Paul King, Gary Gregory, Sebb. 
* COLLECTIONS-885:  PatriciaTrie submap and range view operations silently mutate trie structure resulting in ConcurrentModificationException for any iterating threads #672. Thanks to John Griffin, Gary Gregory. 
* COLLECTIONS-886:  [javadoc] CompositeSet.addComposited(Set) does not throw NullPointerException when null is passed #675. Thanks to Partha Protim Paul. 
* COLLECTIONS-887:  ConcurrentReferenceHashMap.remove(key), remove(key, value), replace(key, value), and replace(key, oldValue, newValue) throw NullPointerException inconsistently. Thanks to Partha Paul, Gary Gregory. 
* COLLECTIONS-888:  PatriciaTrie incompatible with Java 21 (JEP 431 Sequenced Collections). Thanks to Marc Carter, Gary Gregory. 
* Reject non-positive entry count in bag/multiset doReadObject (#679). Thanks to Dexter.k, Gary Gregory. 
* Fix most Junit 5 nested tests (#681). Thanks to Dexter.k, Gary Gregory. 
* COLLECTIONS-881:  MultiMapUtils.getXXX ensure safe copy (#669). Thanks to Suhyeon Park, Gary Gregory. 
* Re-validate entries in PredicatedMap/PredicatedCollection readObject (#682). Thanks to Dexter.k, Gary Gregory. 
* COLLECTIONS-889:  IndexedCollection.remove(Object) removes all values for a non-unique index key. Thanks to Ruiqi Dong, Gary Gregory. 
* COLLECTIONS-890:  TransformIterator throws NullPointerException when its transformer is null. Thanks to Ruiqi Dong, Gary Gregory. 
* COLLECTIONS-892:  IndexedCollection.add(Object) mutates unique indexed collections before rejecting duplicate keys. Thanks to Ruiqi Dong, Gary Gregory. 
* COLLECTIONS-878:  MapUtils.invertMap() improves HashMap construction (#652). Thanks to Maxim Safronov, Gary Gregory. 
* Validate order and uniqueness invariants in decorator readObject() (#684). Thanks to Dexter.k, Gary Gregory. 
* TransformIterator now fail-fast on a null Iterator (#686). Thanks to Gary Gregory. 
* COLLECTIONS-884:  [COLLECTIONS-884] Fix JUnit 5 test discovery for Map EntrySet and Values views (#689). Thanks to sankalp suman, Ben Manes. 
* Reject non-positive maxSize in LRUMap.doReadObject() (#690). Thanks to Dexter.k, Gary Gregory. 
* [javadoc] Document that BloomFilter merge operations are non-atomic and a filter that throws during a merge should be considered invalid (#695). Thanks to Naveed Khan, Alex Herbert, Gary Gregory. 
* Fix AbstractMapBag.retainAll removing all copies when the other bag has more (#692). Thanks to Vasiliy Mikhailov, Gary Gregory. 
* Fix integer overflow in SetOperations.cosineSimilarity (#693). Thanks to Vasiliy Mikhailov, Gary Gregory. 
* Validate deserialized size in CircularFifoQueue.readObject (#678). Thanks to Vasiliy Mikhailov, Gary Gregory. 
* Do not mutate the input map in SwitchTransformer.switchTransformer (#696). Thanks to Vasiliy Mikhailov, Gary Gregory. 
* Do not mutate the input map in SwitchClosure.switchClosure, ClosureUtils.switchMapClosure and TransformerUtils.switchMapTransformer (#700). Thanks to Naveed Khan, Gary Gregory. 
* Fix stale size in AbstractMapMultiSet view iterator remove (#701). Thanks to Dexter.k, Gary Gregory. 
* Stop ExtendedMessageFormat seekNonWs reading past the pattern end (#1740). Thanks to Javid Khan, Gary Gregory. 
* Remove stale keys in OrderedProperties compute and merge (#702). Thanks to Dexter.k, Gary Gregory. 
* COLLECTIONS-776:  Fix expiration bypass in PassiveExpiringMap when wrapped in SynchronizedMap (#694). Thanks to sankalp suman, Gary Gregory. 
* Fix MapUtils.getIntValue(Map, K, Function) returning a byte (#704). Thanks to Dexter.k, Gary Gregory. 
* COLLECTIONS-893:  Bring (Collection compliant) MultiSet family to (non-compliant) Bag parity (#703). Thanks to Paul King, Gary Gregory. 
* AbstractMapBag and AbstractMapMultiSet.add(Object, int) overflow the size and element count past Integer.MAX_VALUE (#705). Thanks to Naveed Khan, Gary Gregory. 
* COLLECTIONS-894:  TreeBag documentation should explicitly warn about infinite loop as a result of concurrent writes (#707). Thanks to Paul King, Sol Thiessen, Gary Gregory. 
* COLLECTIONS-896:  Add TransformedMultiSet plus fill minor gaps for MultiSet vs. Bags (#708). Thanks to Paul King, Gary Gregory. 
* COLLECTIONS-895:  Deprecate the Bag family in favor of the MultiSet family (#709). Thanks to Paul King, Gary Gregory. 
* CompositeCollection, CompositeSet, CompositeMap, AbstractMultiValuedMap and AbstractMultiSet size() overflow int when the total exceeds Integer.MAX_VALUE (#710). Thanks to Naveed Khan, Gary Gregory. 
* DualHashBidiMap, DualLinkedHashBidiMap, and DualTreeBidiMap entrySet() Map.Entry.setValue(Object) returns the new value instead of the previous value (#711). Thanks to Naveed Khan, Gary Gregory. 
* COLLECTIONS-714:  PatriciaTrie ignores trailing null characters in keys (#712). Thanks to sankalp suman, Gary Gregory. 
* Flat3Map entrySet().remove(Object) removes a mapping when only the key matches, ignoring the entry value (#714). Thanks to Naveed Khan, Gary Gregory. 
* SetUniqueList and ListOrderedSet leave the backing collection inconsistent when add(int, Object) or addAll(int, Collection) is called with an out-of-range index. Thanks to Naveed Khan, Gary Gregory. 
* CollectionUtils.collate(Iterable, Iterable, Comparator, boolean) does not remove duplicate null elements when includeDuplicates is false (#715). Thanks to Naveed Khan, Gary Gregory. 
* Do not register a value collection until an add succeeds (#717). Thanks to Naveed Khan, Gary Gregory. 
* Increment modCount after the bounds check in TreeList add and remove (#716). Thanks to Naveed Khan, Gary Gregory. 
* Add messages when throwing NullPointerException. Thanks to Gary Gregory. 
* Reject remove on the Unmodifiable map from SplitMapUtils.readableMap (#718). Thanks to Naveed Khan, Gary Gregory. 
* Keep OrderedProperties keySet and values in sync with the map (#719). Thanks to Naveed Khan, Gary Gregory. 
* COLLECTIONS-859:  Clarify ambiguous @return Javadoc in PredicateUtils. Thanks to Daniele, THE_ZAID, Gary Gregory. 
* Synchronize forEach() in SynchronizedCollection (#720). Thanks to Naveed Khan, Gary Gregory. 

Changes
-------

* Bump org.apache.commons:commons-parent from 81 to 103 #612, #645, #662, #663. Thanks to Gary Gregory, Dependabot. 
* Bump com.google.guava:guava-testlib from 33.3.1-jre to 33.5.0-jre #644. Thanks to Gary Gregory. 
* Bump PMD from 7.8.0 to 7.13.0 (now inherited from parent POM). Thanks to Gary Gregory. 
* Bump org.easymock:easymock from 5.5.0 to 5.6.0 #617. Thanks to Gary Gregory. 
* [test] Bump org.apache.commons:commons-lang3 from 3.17.0 to 3.20.0 #625. Thanks to Gary Gregory. 
* [test] Bump commons-io:commons-io from 2.19.0 to 2.22.0. Thanks to Gary Gregory. 
* Bump commons-codec:commons-codec from 1.18.0 to 1.22.1. Thanks to Gary Gregory. 
* Bump doxia.module.markdown.version from 2.0.0 to 2.1.0. Thanks to Gary Gregory. 
* Bump com.google.guava:guava-testlib from 33.5.0-jre to 33.6.0-jre (#680). Thanks to Gary Gregory, Dependabot. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.5.0 Release Notes
----------------------------------------------

The Apache Commons Collections team is pleased to announce the release of Apache Commons Collections 4.5.0.

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

This is a feature and maintenance release. Java 8 or later is required.

Changes in this version
-----------------------

New features
------------

* Add IteratorUtils.toSet(Iterator). Thanks to Gary Gregory. 
* Add IteratorUtils.toSet(Iterator, int). Thanks to Gary Gregory. 
* Add EnumerationUtils.toSet(Enumeration). Thanks to Gary Gregory. 
* COLLECTIONS-693:  Please add OWASP Dependency Check to the build. Thanks to Gary Gregory. 

Fixed Bugs
----------

* Refactor AbstractPropertiesFactory.load(File) to use NIO. Thanks to Gary Gregory. 
* Refactor AbstractPropertiesFactory.load(String) to use NIO. Thanks to Gary Gregory. 

Changes
-------

* Bump commons-codec:commons-codec from 1.17.1 to 1.18.0 #591. Thanks to Gary Gregory. 
* Bump org.apache.commons:commons-parent from 78 to 81 #2296. Thanks to Gary Gregory, Dependabot. 
* Bump commons.jacoco.version from 0.8.13-SNAPSHOT to 0.13.0. Thanks to Gary Gregory. 
* [test] Bump commons-io:commons-io from 2.18.0 to 2.19.0. Thanks to Gary Gregory. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.5.0-M3 RELEASE NOTES
-------------------------------------------------

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

This is a feature and maintenance release. Java 8 or later is required.

Changes in this version
-----------------------

New features
------------

* LayerManager.Builder implements Supplier. Thanks to Gary Gregory. 
* Add CollectionUtils.duplicateList(Collection). Thanks to Gary Gregory, hemanth0525. 
* Add CollectionUtils.duplicateSet(Collection). Thanks to Gary Gregory, hemanth0525. 
* Add CollectionUtils.duplicateSequencedSet(Collection). Thanks to Gary Gregory, hemanth0525. 
* Add HashBag.HashBag(Iterable). Thanks to Gary Gregory. 
* Add TreeBag.TreeBag(Iterable). Thanks to Gary Gregory. 
* COLLECTIONS-858:  Add CartesianProductIterator #509. Thanks to Alexey Pelykh, Alex Herbert, Gary Gregory. 
* Add missing methods in AbstractMapTests. Thanks to Gary Gregory. 
* COLLECTIONS-700:  Add ConcurrentReferenceHashMap. Thanks to Gary Gregory. 
* Add commons.easymock.version to parameterize EasyMock version. Thanks to Gary Gregory. 
* COLLECTIONS-869:  Add org.apache.commons.collections4.IteratorUtils.chainedIterator(Iterator<? extends Iterator<? extends E>>). Thanks to Gary Gregory. 
* COLLECTIONS-533:  Add ArrayListValuedLinkedHashMap #560. Thanks to Peter De Maeyer. 
* Add missing test AbstractIteratorTest.testForEachRemaining(). Thanks to Gary Gregory. 
* Add FilterIterator.removeNext() #564. Thanks to Gary Gregory, Claude Warren. 
* COLLECTIONS-870:  Add ExtendedIterator and tests #564. Thanks to Claude Warren, Gary Gregory. 
* Refactor ExtendedIterator and FilterIterator with a new interface IteratorOperations. Thanks to Gary Gregory. 
* COLLECTIONS-871:  Add LinkedHashSetValuedLinkedHashMap #565. Thanks to Peter De Maeyer. 

Fixed Bugs
----------

* COLLECTIONS-857:  Complete bloom filter documentation #507. Thanks to Claude Warren. 
* Package private AbstractEmptyIterator implements ResettableIterator so subclasses don't. Thanks to Gary Gregory. 
* Deprecate AbstractEmptyIterator.add(E) without replacement. Thanks to Gary Gregory. 
* Add missing Javadocs. Thanks to Gary Gregory. 
* PatriciaTrie constructor reuse the stateless singleton StringKeyAnalyzer.INSTANCE. Thanks to Gary Gregory. 
* Deprecate StringKeyAnalyzer.StringKeyAnalyzer() in favor of StringKeyAnalyzer.INSTANCE. Thanks to Gary Gregory. 
* [Functional] FunctorUtils.validate(Closure...) is now FunctorUtils.validate(Consumer...). Thanks to Gary Gregory. 
* [Functional] FunctorUtils.validate(Predicate...) is now FunctorUtils.validate(java.util.function.Predicate...). Thanks to Gary Gregory. 
* [Functional] FunctorUtils.validate(Transformer...) is now FunctorUtils.validate(Function...). Thanks to Gary Gregory. 
* Increase test coverage for ListUtils #517. Thanks to Dávid Szigecsán. Gary Gregory. 
* Use the Junit (Jupiter) API #518. Thanks to Dávid Szigecsán. 
* BloomFilterExtractor.flatten() should throw an exception instead of returning null. Thanks to Gary Gregory, Alex Herbert. 
* Improve WrappedBloomFilterTest. All tests now assert copy() the same way. Thanks to Gary Gregory, Claude Warren. 
* COLLECTIONS-860:  Javadoc CollectionBag.add* to throw ClassCastException. Thanks to Gary Gregory,  Daniele. 
* Fix generics in IteratorChain.IteratorChain(Collection). Thanks to Gary Gregory. 
* Fix generics in org.apache.commons.collections4.IteratorUtils.chainedIterator(Collection). Thanks to Gary Gregory. 
* COLLECTIONS-856:  Javadoc: Document interaction between peek and filter iterator #515. Thanks to Benjamin Confino, Gary Gregory. 
* COLLECTIONS-815:  Javadoc: Update ClosureUtils Javadoc to match runtime. Thanks to Elia Bertolina, Gary Gregory. 
* COLLECTIONS-815:  Javadoc: Update ClosureUtils Javadoc to match runtime. Thanks to Gary Gregory. 
* COLLECTIONS-777:  Migrate to JUnit 5. Thanks to Gary Gregory. 
* Fix NullPointerException in FilterIterator.setNextObject(). Thanks to Gary Gregory. 
* EqualPredicate.test(Object) should return true if the parameter is the same object as given the constructor. Thanks to Gary Gregory. 

Changes
-------

* Bump org.apache.commons:commons-parent from 71 to 78 #534, #545, #550 #555, #566. Thanks to Gary Gregory. 
* COLLECTIONS-857:  Update bloom filter documentation #508. Thanks to Claude Warren. 
* Bump commons-codec:commons-codec from 1.17.0 to 1.17.1 #514. Thanks to Dependabot, Gary Gregory. 
* Bump org.apache.commons:commons-lang3 from 3.14.0 to 3.17.0 #516, #525, #535. Thanks to Dependabot, Gary Gregory. 
* Bump org.hamcrest:hamcrest from 2.2 to 3.0 #522, #532. Thanks to Dependabot, Gary Gregory. 
* Bump com.google.guava:guava-testlib from 33.2.1-jre to 33.3.1-jre #531, #549. Thanks to Dependabot, Gary Gregory. 
* Bump MathJax from 2.7.2 to 2.7.9. Thanks to Gary Gregory. 
* [test] Bump org.easymock:easymock from 5.3.0 to 5.5.0 #521, #576. Thanks to Dependabot, Gary Gregory. 
* [test] Bump commons-io:commons-io from 2.16.1 to 2.18.0 #544, #575. Thanks to Dependabot, Gary Gregory. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.5.0-M2 RELEASE NOTES
-------------------------------------------------

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

This milestone release requires Java 8 and adds the package `org.apache.commons.collections4.bloomfilter`.

Changes in this version
-----------------------

New features
------------

* COLLECTIONS-852:  Add layered Bloom filter clean method #476. Thanks to Claude Warren, Alex Herbert. 
* COLLECTIONS-842:  Deprecate Lists incompatible with Java 21, add new variant of AbstractLinkedList #485. Thanks to Julian Reschke. 

Fixed Bugs
----------

* Deprecate Closure in favor of java.util.function.Consumer. Thanks to Gary Gregory. 
* Deprecate Factory in favor of java.util.function.Supplier. Thanks to Gary Gregory. 
* Deprecate Predicate in favor of java.util.function.Predicate. Thanks to Gary Gregory. 
* Deprecate Transformer in favor of java.util.function.Function. Thanks to Gary Gregory. 
* COLLECTIONS-853:  Change LayerManager to use List and added generics to LayerdedBloomFilter #481. Thanks to Claude Warren, Alex Herbert, Gary Gregory. 
* Fix PMD UselessOverridingMethod in PropertiesFactory.EmptyProperties. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in AbstractHashedMap. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in AbstractLinkedMap. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in CaseInsensitiveMap. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in CollectionUtils. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in DefaultEquator. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in IndexUtils. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in LinkIterator. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in MapUtils. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in PredicateUtils. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in ReferenceMapIterator. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in StringKeyAnalyzer. Thanks to PMD, Gary Gregory. 
* Fix PMD UnnecessaryFullyQualifiedName in TransformerUtils. Thanks to PMD, Gary Gregory. 
* COLLECTIONS-854:  Renaming bloomfilter components and methods as per ticket #492. Thanks to Claude Warren, Alex Herbert, Gary Gregory. 
* Fix Java 22 builds through Easymock upgrade #502. Thanks to Gary Gregory. 
* COLLECTIONS-855:  Fixed hashing calculation as per report #501. Thanks to Claude Warren, Alex Herbert, Gary Gregory. 

Changes
-------

* Bump org.apache.commons:commons-parent from 67 to 71 #473, #503. Thanks to Dependabot, Gary Gregory. 
* Bump tests commons-io:commons-io from 2.16.0 to 2.16.1 #475. Thanks to Dependabot. 
* Bump optional commons-codec:commons-codec from 1.16.1 to 1.17.0. Thanks to Dependabot. 
* Bump com.google.guava:guava-testlib from 33.1.0-jre to 33.2.1-jre #487, #500. Thanks to Dependabot. 
* Bump org.easymock:easymock from 5.2.0 to 5.3.0 #502. Thanks to Dependabot. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.5.0-M1 RELEASE NOTES
-------------------------------------------------

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

This milestone release requires Java 8 and adds the package `org.apache.commons.collections4.bloomfilter` for review.

Changes in this version
-----------------------

New features
------------

* COLLECTIONS-843:  Implement Layered Bloom filter #402. Thanks to Claude Warren, Alex Herbert, Gary Gregory. 
* COLLECTIONS-748:  Let org.apache.commons.collections4.properties.[Sorted]PropertiesFactory accept XML input. Thanks to Gary Gregory. 
* COLLECTIONS-772:  Add private constructor to ArrayUtils; better Javadocs, #195. Thanks to Arturo Bernal, Alex Herbert, Gary Gregory, Bruno P. Kinoshita. 
* COLLECTIONS-760:  Add tests for MapUtils. Thanks to Isira Seneviratne. 
* Test subMap and tailMap #94. Thanks to dota17. 
* Add junit for add, remove, setCount and entrySet in the UnmodifiableMultiSetTest #95. Thanks to dota17. 
* Add two test cases in UnmodifiableQueueTest #96. Thanks to dota17. 
* Update two test cases in AbstractMultiValuedMapTest testPutAll_map1 testPutAll_map2 #97. Thanks to dota17. 
* Add a test case for AbstractMultiValuedMapTest testToString() #100. Thanks to dota17. 
* Add a test case AbstractMultiValuedMapTest#testMultiValuedMapIterator() #108. Thanks to dota17. 
* Add junit for getWithNull and subList in LazyListTest; #103. Thanks to dota17. 
* Add test cases to ArrayListValuedHashMapTest; #106. Thanks to dota17. 
* Add test cases in UnmodifiableMultiValuedMapTest; #102. Thanks to dota17. 
* COLLECTIONS-674:  Add CollectionUtils removeRange, removeCount #91. Thanks to dota17. 
* Add ListUtils.getFirst() and getLast(). Thanks to Gary Gregory. 
* Add singleton ObjectToStringComparator.INSTANCE. Thanks to Gary Gregory. 
* Add github/codeql-action. 
* COLLECTIONS-811:  Add Guava testlib tests. Thanks to Ben Manes. 
* COLLECTIONS-728:  Add BloomFilter contribution. Thanks to Claude Warren. 
* COLLECTIONS-726:  Add lambdas function to provide default values in MapUtils #81. Thanks to liuhaozzu, Gary Gregory. 
* Add three test cases in UnmodifiableQueueTest #105. Thanks to dota17. 
* COLLECTIONS-744:  Add org.apache.commons.collections4.EnumerationUtils.asIterable(Enumeration). Thanks to Gary Gregory. 
* COLLECTIONS-746:  Add org.apache.commons.collections4.properties.PropertiesFactory.EMPTY_PROPERTIES. Thanks to Gary Gregory. 
* COLLECTIONS-746:  Add PropertiesFactory. Thanks to Gary Gregory. 
* Add org.apache.commons.collections4.properties.OrderedProperties and OrderedPropertiesFactory. Thanks to Gary Gregory. 
* Make AbstractPatriciaTrie public #407. Thanks to Vadim, Claude Warren, Gary Gregory, Alex Herbert. 
* Add test cases for indexOf and contains method of ArrayUtils class #215. Thanks to Ajay Kumar Jha, Bruno P. Kinoshita, Claude Warren. 
* Add Maven property project.build.outputTimestamp for build reproducibility. Thanks to Gary Gregory. 

Fixed Bugs
----------

* COLLECTIONS-780:  Use assertThrows V2. Thanks to Arturo Bernal. 
* COLLECTIONS-778:  Use assertThrows. Thanks to Arturo Bernal. 
* COLLECTIONS-771:  Fix flaky AbstractMultiValuedMapTest#testToString. Thanks to Xin Tong. 
* COLLECTIONS-769:  Fix flaky UnmodifiableMultiValuedMapTest. Thanks to Xin (Cynthia) Tong. 
* COLLECTIONS-764:  Refine javadoc and fix typos. Thanks to XenoAmess. 
* COLLECTIONS-765:  Update Javadoc of ListIteratorWrapper#remove. Thanks to Tobias Kiecker. 
* COLLECTIONS-708:  Add hashCode method to CollectionUtils that supports an equator parameter. Thanks to dota17. 
* COLLECTIONS-759:  Fix checkstyle issues regarding missing newline at end of file, and CRLF vs LF. 
* COLLECTIONS-727:  A potential misleading comment #82. Thanks to XiangzheXu, XZ-X. 
* COLLECTIONS-679:  Using existing class in example given in Javadocs. #85. Thanks to David Mollitor, Mikko Maunu. 
* COLLECTIONS-729:  Add test cases to IteratorUtilsTest #86. Thanks to dota17. 
* Fix typos in release notes and Javadoc for AbstractHashedMap and AbstractHashedMapTest #88. Thanks to dota17. 
* COLLECTIONS-740:  Add missing @throws comment for SwitchTransformer.switchTransformer. #124. Thanks to Pengyu Nie. 
* COLLECTIONS-739:  Fix inconsistent @throws comments in DefaultedMap #123. Thanks to Pengyu Nie. 
* Fix links to release notes and update contents for 4.4 #127. Thanks to Dominik Stadler. 
* Fix checkstyle syntax (was scope, is now accessModifiers) via PR #235. Thanks to Jin Xu. 
* COLLECTIONS-786:  Fix PassiveExpiringMap documentation for methods that involve accessing the entire map. Thanks to vandrewskis. 
* SortedProperties should sort entrySet() as well as keys() #256. Thanks to Michael Berry. 
* COLLECTIONS-796:  SetUniqueList.createSetBasedOnList doesn't add list elements to return value. Thanks to Clemens Kurz. 
* COLLECTIONS-799:  UnmodifiableNavigableSet can be modified by pollFirst() and pollLast(). Thanks to Stefano Cordio. 
* Use Java 8 and method reference. #274. Thanks to Arturo Bernal. 
* COLLECTIONS-788:  Use Java 8 features #228. Thanks to Arturo Bernal. 
* COLLECTIONS-807:  Upgraded org.junit.Test to org.junit.jupiter.api.Test #295, #304. Thanks to Pradeesh Kumar, samabcde. 
* COLLECTIONS-802:  ReferenceMap iterator remove violates contract #300. Thanks to samabcde, Ben Manes. 
* COLLECTIONS-812:  Fix flaky EmptyPropertiesTest#testSave. Thanks to Ng Tsz Sum. 
* Use java.lang.Objects#equals; eliminate a couple of nulls #307. Thanks to Steve Bosman. 
* COLLECTIONS-814:  CollectionUtils.removeAll() not throwing NPE #340. Thanks to angusdev. 
* Fix minor typos #323 Thanks to Marc Wrobel. 
* AbstractReferenceMap.SoftRef implements hashCode() but not equals(). Thanks to Gary Gregory. 
* AbstractReferenceMap.WeakRef implements hashCode() but not equals(). Thanks to Gary Gregory. 
* Use Java style array decelerations #362. Thanks to Arturo Bernal. 
* COLLECTIONS-806:  Remove use of JUnit4 junit.framework.Test class #371. Thanks to Piyush Sagar. 
* COLLECTIONS-839:  Migrate Map tests to JUnit 5 assertions #391. Thanks to Sam Ng, Gary Gregory, Bruno P. Kinoshita. 
* COLLECTIONS-835:  Fix links in javadoc and documentations #325. Thanks to Marc Wrobel. 
* 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. 
* COLLECTIONS-836:  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. Thanks to Anant Dahiya. 
* COLLECTIONS-737:  Return 0 immediately if the given iterable is null in IterableUtils#size. Update tests. Thanks to Prodigysov. 
* COLLECTIONS-697:  Javadoc for FixedSizeList should warn that modifying underlying list is still allowed and is not prevented Thanks to Ranjan George. 
* Fill in some map test cases #104. Thanks to dota17. 
* COLLECTIONS-738:  Remove the redundant assertNull in IterableUtilsTest.find and update Javadocs. Thanks to Pengyu Nie. 
* COLLECTIONS-724:  Simplify two remove-if loops #77. Thanks to Eitan Adler. 
* Fix inconsistent @throws comments in ListOrderedSet #125. Thanks to Chen. 
* COLLECTIONS-704:  Update size to capacity for GrowthList #90. Thanks to dota17. 
* TransformedSortedBagTest should work with TransformedSortedBag, not TransformedBag #98. Thanks to dota17. 
* Remove the parentheses in the error message in CircularFifoQueue #107. Thanks to dota17. 
* COLLECTIONS-747:  MultiKey.getKeys class cast exception. Thanks to Gary Gregory, Walter Laan. 
* COLLECTIONS-759:  Use newline at end of file, and convert to Unix (LF instead of CRLF) fixing checkstyle #147. Thanks to Bruno P. Kinoshita. 
* Fixed the typo and deal the NPE with Objects.requireNonNull #118. Thanks to Chen. 
* COLLECTIONS-757:  Javadoc BidiMap classes #146. Thanks to Chen. 
* COLLECTIONS-773:  Assert ensureCapacity #198. Thanks to Martin Monperrus. 
* COLLECTIONS-775:  Fix flaky CollectionUtilsTest.getFromMap() #200. Thanks to Xin Tong, Bruno P. Kinoshita, Gary Gregory. 
* Minor Improvements #203, #208. Thanks to Arturo Bernal. 
* Fix typo erroring -> erring #202. Thanks to EruDev. 
* COLLECTIONS-734:  Encountered an IllegalStateException while traversing with Flat3Map.entrySet(). #115. Thanks to Chen. 
* Better NPE messages in CollectionUtils with Objects.requireNonNull #117. Thanks to Chen, Bruno P. Kinoshita, Gary Gregory, Michael Osipov. 
* Improve MapUtils with the null checks, add JUnit for it and add Javadoc for the parameter indent. #126. Thanks to Chen. 
* COLLECTIONS-793:  Simplify Assertion. Thanks to Arturo Bernal. 
* [StepSecurity] ci: Harden GitHub Actions #401. Thanks to step-security-bot, Gary Gregory. 
* Fix punctuation and minor Javadoc issues #409. Thanks to Martin Wiesner, Bruno P. Kinoshita, Gary Gregory. 
* Deprecate IterableUtils 0-argument constructor. Thanks to Gary Gregory. 
* COLLECTIONS-850:  Tests in org.apache.commons.collections4.multimap should not depend on map iteration order, see also #429. Thanks to Gary Gregory, Anirudh Madhavan. 
* COLLECTIONS-850:  Reimplement FixedOrderComparator#equals() and hashCode(), see also #392. Thanks to Gary Gregory, Saurabh Rahate. 

Changes
-------

* Bump org.easymock:easymock from 4.0.2 to 5.2.0 #352, #355, #375, #414. Thanks to Gary Gregory, Dependabot. 
* Bump actions/cache. Thanks to Dependabot, Gary Gregory. 
* Bump actions/setup-java. Thanks to Dependabot, Gary Gregory. 
* Bump actions/checkout. Thanks to Dependabot, Gary Gregory. 
* Bump codecov/codecov-action. Thanks to Dependabot. 
* Bump Apache commons-parent from 48 to 67. Thanks to Gary Gregory, Dependabot. 
* Bump Jacoco from 0.8.4 to 0.8.8. Thanks to Gary Gregory. 
* Bump tests from Apache Commons Lang 3.9 to 3.11. Thanks to Gary Gregory. 
* Bump maven-checkstyle-plugin 3.1.0 to 3.2.1 #379. Thanks to Gary Gregory. 
* Bump checkstyle from 8.29 to 9.3. Thanks to Gary Gregory. 
* COLLECTIONS-754:  Bump to JUnit v5.6.2 #136. Thanks to John Patrick. 
* COLLECTIONS-777:  Migrate JUnit 4.12 to 5.9.1 #324, #338. Thanks to John Patrick, Gary Gregory, Dependabot. 
* COLLECTIONS-753:  Bump Hamcrest to 2.2. Thanks to John Patrick. 
* Remove deprecated sudo setting. #161. Thanks to dengliming. 
* Bump tests from commons-io:commons-io 2.6 to 2.16.0 #180, #469. Thanks to Gary Gregory. 
* Bump maven-pmd-plugin from 3.12.0 to 3.19.0 #167, #196, #253, #311, #334. Thanks to Dependabot, Gary Gregory. 
* Bump optional commons-codec:commons-codec from 1.14 to 1.16.1. Thanks to Gary Gregory. 
* Bump commons.junit.version from 5.6.2 to 5.8.2 #181 #213 #236 #252 #254 #268. Thanks to Dependabot. 
* COLLECTIONS-774:  Bump maven-antrun-plugin from 1.8 to 3.1.0 #170, #303. Thanks to Dependabot. 
* Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #211. Thanks to Dependabot. 
* COLLECTIONS-779:  Migrate assert to Assertions #209. Thanks to Arturo Bernal, Gary Gregory. 
* COLLECTIONS-781:  Add and use CollectionUtils.INDEX_NOT_FOUND constant. Thanks to Arturo Bernal, Gary Gregory. 
* Bump commons-lang3 from 3.11 to 3.14.0. Thanks to Dependabot, Gary Gregory. 
* COLLECTIONS-785:  Add new variables to oac.collections4.CollectionUtils and use them in the code base. Thanks to Arturo Bernal. 
* Bump easymock from 4.2 to 4.3 #226. Thanks to Dependabot. 
* Bump maven-pmd-plugin from 3.15.0 to 3.16.0 #286. Thanks to Dependabot. 
* Bump commons-parent from 52 to 58 #299, #368, #373, #393. Thanks to Dependabot, Gary Gregory. 
* Bump japicmp from 0.15.4 to 0.16.0. Thanks to Dependabot. 
* Bump pmd from 6.46.0 to 6.52.0 #318, #327, #333, #347. Thanks to Dependabot, Gary Gregory. 
* Bump guava-testlib from 31.1-jre to 33.1.0-jre #394, #395, #404, #405, #411, #423, #438, #462. Thanks to Dependabot. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.4 RELEASE NOTES
--------------------------------------------

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

Maintenance release.

Changes in this version
-----------------------

New features
------------

* COLLECTIONS-715:  Implement Collection's removeIf(). Thanks to morningmemo, Gary Gregory. 
* COLLECTIONS-719:  Create a PropertiesFactory and SortedPropertiesFactory. Thanks to Gary Gregory. 
* COLLECTIONS-719:  Support Transformer for LazyList #52. Thanks to Stephan Windmüller, Bruno P. Kinoshita. 
* COLLECTIONS-723:  Make use of FunctionalInterface #48. Thanks to Eitan Adler, SOC, Bruno P. Kinoshita. 

Fixed Bugs
----------

* COLLECTIONS-710:  NullPointerExceptions in CompositeCollection, CompositeSet, and CompositeMap. Thanks to Yu Shi, Gary Gregory. 

Changes
-------

* COLLECTIONS-718:  Fix LRUMap exception message. Thanks to Eitan Adler. 
* COLLECTIONS-716:  Don't include email address in Exception messages. Thanks to Sebb. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.3 RELEASE NOTES
--------------------------------------------

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

Update from Java 7 to Java 8, bug fixes, and small changes.

Changes in this version include:

New features
------------

* COLLECTIONS-696:  AbstractReferenceMap made easier for subclassing; PR #51. Thanks to Maxim Solodovnik.

Fixed Bugs
----------

* COLLECTIONS-691:  Use boolean operator for boolean result. Thanks to Eitan Adler.
* COLLECTIONS-701:  StackOverflowError in SetUniqueList.add() when it receives itself. Thanks to Shin Hong, Don Jeba.
* COLLECTIONS-703:  The PassiveExpiringMap#put() method should return the previous record only if not expired. Thanks to Tomas Tulka.
* COLLECTIONS-706:  Add SetUtils.unmodifiableSet(T... items) method. Thanks to Richard Eckart de Castilho, Gary Gregory.

Changes
-------

* COLLECTIONS-688:  Update platform requirement from Java 7 to 8.
* COLLECTIONS-689:  Link to Javadoc API broken. Thanks to Richard Walker.
* COLLECTIONS-692:  Replace use of deprecated Class#newInstance() PR #49. Thanks to Gary Gregory, Eitan Adler.

Please NOTE: Clirr errors reported for this release are false positive, this is proved by Japicmp report
And manual testing.

For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.2 RELEASE NOTES
--------------------------------------------

The Apache Commons Collections package contains types that extend and augment the Java Collections Framework.

Update from Java 6 to Java 7, bug fixes, and small changes.

Changes in this version include:

New features
------------

* COLLECTIONS-681:  Add test for MultiSetUtils Thanks to Stephan Fuhrmann. 
* COLLECTIONS-658:  Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility. 
* COLLECTIONS-589:  Add null-safe MapUtils.size(Map<?, ?>) method. Thanks to Gary Gregory. 
* COLLECTIONS-586:  PatriciaTrie prefixMap clear throws NullPointerException. Thanks to Shailender Bathula, Gary Gregory. 
* COLLECTIONS-654:  Add class SortedProperties to sort keys. 
* COLLECTIONS-668:  Add CollectionUtils containsAny method for primitive array: org.apache.commons.collections4.CollectionUtils.containsAny(Collection<?>, T...). Thanks to Gary Gregory. 
* COLLECTIONS-575:  Synchronized queue wrapper in QueueUtils. Thanks to Guram Savinov, Grzegorz Rożniecki, Bruno P. Kinoshita, Gary Gregory. 
* COLLECTIONS-670:  Add org.apache.commons.collections4.IteratorUtils.first(Iterator). Thanks to Gary Gregory. 
* COLLECTIONS-671:  Add org.apache.commons.collections4.IterableUtils.first(Iterable). Thanks to Gary Gregory. 

Fixed Bugs
----------

* COLLECTIONS-599:  HashEntry array object naming data initialized with double the size during deserialization. Thanks to Tejas Patel, Saleem Akbar, Gary Gregory. 
* COLLECTIONS-662:  Unit tests MapUtilsTest and ListIteratorWrapperTest no longer fail on Java 9. Thanks to Vamsi Kavuri. 
* COLLECTIONS-661:  Intermittent test failures in Windows for HashSetValuedHashMap. 
* COLLECTIONS-660:  Uncomment test in AbstractMapTest regarding LRUMap equals. 
* COLLECTIONS-656:  Fix site build on Java 8. 
* COLLECTIONS-653:  Update Javadoc to Build on Java 1.8. 
* COLLECTIONS-606:  Build status, Coverage status and Maven central weren't in README.md Thanks to Vamsi Kavuri. 
* COLLECTIONS-594:  Website spelling error: MultiValuedMapList. Thanks to Javen O'Neal.
* COLLECTIONS-597:  Correction of Javadoc for org.apache.commons.collections4.functors.CatchAndRethrowClosure. Thanks to Enrique. 
* COLLECTIONS-678:  The verification of unsupported iterator methods is not complete. Thanks to Oscar Luis Vera Pérez. 
* COLLECTIONS-673:  ListUtils.partition potential integer overflow. Thanks to John Mark, Stephan Fuhrmann. 

Changes
-------

* COLLECTIONS-602:  Improve efficiency of DefaultedMap.get. Thanks to John Mark. 
* COLLECTIONS-603:  Small improvements for generics, conditional statements, and warnings suppressions. Thanks to Artem Konovalov. 
* COLLECTIONS-655:  Update platform from Java 6 to Java 7. 
* COLLECTIONS-666:  org.apache.commons.collections4.ListUtils.union(List, List) should pre-allocate result list. Thanks to BELUGA BEHR. 
* COLLECTIONS-669:  Update org.apache.commons.collections4.CollectionUtils.addAll(Collection<C>, C[]) to addAll(Collection<C>, C...). Thanks to BELUGA BEHR, Gary Gregory. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

Download page: https://commons.apache.org/proper/commons-collections/download_collections.cgi

-----------------------------------------------------------------------------

Apache Commons Collections 4.1 RELEASE NOTES
--------------------------------------------

Introduction
------------

Apache Commons Collections is a project to develop and maintain collection
classes based on and inspired by the JDK collection framework.

This v4.1 release is a minor and security release, fixing several bugs present in
previous releases of the 4.X branch. Additionally, this release provides a mitigation
for a known remote code exploitation via the standard java object serialization
mechanism. Serialization support for unsafe classes in the functor package has been
completely removed (classes do not implement the Serializable interface anymore).
For more details, please refer to COLLECTIONS-580.

All users are strongly encouraged to update to this release.


Compatibility
-------------

 o Java 6 or later is now required (previous version 4.0 required Java 5).
 o This release is source and binary compatible with the previous 4.0 release
   of Commons Collections with the exception that some classes in the functor
   package do not implement the Serializable interface anymore (see COLLECTIONS-580). 
 o some unit tests are disabled when executed with an IBM JDK 6 due to a faulty
   java.util.TreeMap implementation.

Major changes since 4.0
-----------------------

 o Added interface MultiSet (package multiset)
 o Added interfaces MultiValuedMap, ListValuedMap and SetValuedMap (package multimap) 
 o Added fluent API for Iterable instances (class FluentIterable)


Changes
-------

* [COLLECTIONS-580]: Serialization support for unsafe classes in the functor package
                     has been removed as this can be exploited for remote code execution
                     attacks. Classes considered to be unsafe are: CloneTransformer,
                     ForClosure, InstantiateFactory, InstantiateTransformer, InvokerTransformer,
                     PrototypeCloneFactory, PrototypeSerializationFactory, WhileClosure. 
* [COLLECTIONS-551]: Deprecated various method in "CollectionUtils" in favor of similar
                     methods in the newly introduced "IterableUtils". 
* [COLLECTIONS-570]: All constructors and static factory methods will now throw a "NullPointerException"
                     if a required input argument is null. Previously sometimes a "IllegalArgumentException"
                     was used. 
* [COLLECTIONS-571]: Deprecated methods "synchronizedCollection(Collection)" and
                     "unmodifiableCollection(Collection)" in class "CollectionUtils", the corresponding
                     methods in "java.util.Collections" should be used instead. 
* [COLLECTIONS-562]: Upgraded minimum java requirement to Java 6 (up from Java 5). 


New features
------------

* [COLLECTIONS-508]: Added new interfaces "MultiValuedMap", "ListValuedMap" and "SetValuedMap"
                     as a replacement for "MultiMap". Decorators and implementations reside in
                     the "multimap" package and a "MultiMapUtils" class has been added.
                     The existing interface "MultiMap" as well as the concrete implementation
                     "MultiValueMap" has been deprecated. 
* [COLLECTIONS-567]: Added new MultiSet interface which is intended to be a replacement for
                     the Bag interface. The main difference is that a MultiSet is fully compatible
                     to the Collection contract. 
* [COLLECTIONS-572]: Added set operations to "SetUtils": union, difference, intersection and disjunction.
                     The operations return a view of the result that is backed by the input sets. 
* [COLLECTIONS-557]: Added support to specify the initial size of a "LRUMap". Thanks to Philippe Mouawad. 
* [COLLECTIONS-565]: Added decorators for "NavigableSet" interface. 
* [COLLECTIONS-464]
  +COLLECTIONS-442]: Added new class "FluentIterable" to support a fluent API for manipulating
                     Iterable instances. Additionally various supporting methods have been
                     added to "IterableUtils" and "IteratorUtils". 
* [COLLECTIONS-464]: Added new "ZippingIterator" and factory methods "IteratorUtils#zippingIterator(...)". 
* [COLLECTIONS-464]: Added new decorator "SkippingIterator" and factory methods "IteratorUtils#skippingIterator(...)". 
* [COLLECTIONS-556]: Added method "SetUtils#newIdentityHashSet()" which returns a new identity HashSet
                     using reference-equality instead of object-equality. 
* [COLLECTIONS-395]: Added method "LRUMap#get(Object, boolean)" that allows to query the map
                     without affecting the least recently used order. Thanks to David Hawthorne. 
* [COLLECTIONS-427]: Added "toString(...)" methods to newly created "IterableUtils" and existing "IteratorUtils"
                     to get a string representation of an Iterable/Iterator instance similar to "Arrays#toString(...)".
                     Thanks to Gonçalo Marques. 
* [COLLECTIONS-539]: Changed scope of "CircularFifoQueue#isAtFullCapacity()" to public. Thanks to Guram Savinov. 
* [COLLECTIONS-511]: Added new methods "IterableUtils#partition(...)" to partition an input collection
                     into separate output collections based on evaluation of one or more predicates.
                     Thanks to Nathan Blomquist, Brent Worden. 
* [COLLECTIONS-529]: Added methods "removeAll(...)" and "retainAll(...)" to "CollectionUtils" that perform
                     equality checks using the provided "Equator" object instead of "Object#equals()".
                     Thanks to Alexander Muthmann, Dipanjan Laha. 
* [COLLECTIONS-503]: Added new transformer "IfTransformer" and factory methods "TransformerUtils#ifTransformer(...)"
                     which replace "TransformerUtils#switchTransformer(Predicate, Transformer, Transformer)".
                     Thanks to Josh Cain. 
* [COLLECTIONS-471]: Added new decorator "BoundedIterator" and factory methods "IteratorUtils#boundedIterator(...)".
                     Thanks to Radford Tam. 


Fixed Bugs
----------

* [COLLECTIONS-580]: Added validation when de-serializing a "MultiValueMap#ReflectionFactory":
                     only Collection classes are allowed, otherwise an UnsupportedOperationException
                     will be thrown during de-serialization. 
* [COLLECTIONS-576]: Subclasses of MultiKey did not re-calculate their hashcode after de-serialization.
                     Thanks to Stephan Roch. 
* [COLLECTIONS-566]: "IteratorUtils#collate(...)" methods did not use natural ordering when a
                     null comparator was provided. 
* [COLLECTIONS-558]: Changed return type of "ListOrderedSet#remove(int)" from Object to the generic
                     type parameter. Thanks to Felix Rabe. 
* [COLLECTIONS-555]: Added clarification to javadoc of "TreeBag#add(Object)" wrt null arguments.
                     Thanks to M Kim. 
* [COLLECTIONS-427]: Reverted performance improvement for "SetUniqueList#retainAll(Collection)"
                     introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. 
* [COLLECTIONS-426]: Reverted performance improvement for "ListOrderedSet#retainAll(Collection)"
                     introduced in 4.0. Added clarifying javadoc wrt runtime complexity instead. 
* [COLLECTIONS-530]: Added a Builder for "PredicatedCollection". Elements added to the builder
                     that fail the predicate will not throw an IllegalArgumentException. The builder
                     supports creating predicated lists, bags, sets and queues. Thanks to Erik. 
* [COLLECTIONS-545]: Documented runtime complexity of "CollectionUtils#removeAll(Collection, Collection).
                     Thanks to Oswaldo Olivo. 
* [COLLECTIONS-543]: "AbstractCollectionDecorator" doesn't forward equals and hashCode anymore. 
* [COLLECTIONS-544]: Documented runtime complexity of "CollectionUtils#retainAll(Collection, Collection).
                     Thanks to Oswaldo Olivo. 
* [COLLECTIONS-542]: "AbstractHashedMap" still inherits from "AbstractMap", contrary to what
                     the class javadoc stated. The inheritance will now be removed in v5.0. 
* [COLLECTIONS-525]: The map returned by "PatriciaTrie#prefixMap()" did not contain all keys
                     that are prefixed by the given search key in some rare cases. Thanks to Zigler Zhang. 
* [COLLECTIONS-537]: Harmonized signature of factory methods for functor-related classes which take
                     a collection as input with their array counterparts. Thanks to Frank Jakop. 
* [COLLECTIONS-540]: Added overloaded method "CollectionUtils#get(Enumeration, int)" and simplified
                     code for "CollectionUtils#get(Object, int)". Thanks to Daniel Stewart, Issam El Atif. 
* [COLLECTIONS-536]: Improved check for null input in "MapUtils#putAll(Map, Object[])". Thanks to Tagir Valeev. 
* [COLLECTIONS-534]: Added clarifying javadoc wrt runtime complexity of "CollectionBag#retainAll".
                     Thanks to Oswaldo Olivo. 
* [COLLECTIONS-531]: Use correct type bounds in
                     "CollectionUtils#isEqualCollection(Collection, Collection, Equator)" to
                     prevent a "ClassCastException" at runtime for invalid inputs. Thanks to Dipanjan Laha. 
* [COLLECTIONS-523]: Removed unneeded private method in "PassiveExpiringMap". Thanks to Thiago Andrade. 
* [COLLECTIONS-516]: Added clarification to the javadoc of "MapUtils#toProperties(Map)" in case
                     of null keys/values. Thanks to Cyrille Artho. 
* [COLLECTIONS-524]: "ListOrderedSet#listOrderedSet(List)" did not remove duplicates from the
                     input list as advertised in the javadoc. Thanks to J Goodfellow. 
* [COLLECTIONS-521]: "MultiKeyMap" was throwing a "NullPointerException" for various operations
                     if two key arguments have been used and the second was "null". Thanks to Maxime Nay. 
* [COLLECTIONS-522]: Updated code example for "PredicatedList". Thanks to Erik. 
* [COLLECTIONS-512]: "TransformingComparator" and "FixedOrderComparator" did not comply with
                     the contract of "Object#equals". Thanks to Cyrille Artho. 
* [COLLECTIONS-510]: Fix compilation errors when using source level 1.8 and a recent java 8 compiler.
                     Thanks to Hollis Waite. 
* [COLLECTIONS-509]: Clarified javadoc of "CollectionBag" wrt changes from the original Bag interface. 
* [COLLECTIONS-507]: Removed wrong type bounds for "ComparatorUtils#chainedComparator(...)". Thanks to Gerson. 
* [COLLECTIONS-506]: Added javadoc clarification to class "CollectionUtils" that input objects which
                     override "Object#equals(Object)" must also maintain the general contract of
                     "Object#hashCode()" as various utility methods take advantage of sets/maps/bags.
                     Thanks to Anthony Communier. 

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/proper/commons-collections/

-----------------------------------------------------------------------------

Apache Commons Collections 3.2.2 RELEASE NOTES
----------------------------------------------

Introduction
------------

Commons collections is a project to develop and maintain collection classes
based on and inspired by the JDK collection framework.
This release is JDK1.3 compatible, and does not use JDK1.5 generics.

This v3.2.2 release is a bugfix release, fixing several bugs present in the previous
releases of the 3.2 branch. Additionally, this release provides a mitigation for a
known remote code exploitation via the standard java object serialization mechanism.
By default, serialization support for unsafe classes in the functor package is
disabled and will result in an exception when either trying to serialize or de-serialize
an instance of these classes. For more details, please refer to COLLECTIONS-580.

All users are strongly encouraged to update to this release.


Changes in this version include:

Changes
-------

* COLLECTIONS-580:  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.

Fixed Bugs
----------

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

 
For complete information on Apache Commons Collections, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Collections website:

https://commons.apache.org/collections/

-----------------------------------------------------------------------------
