Release 0.9.23 (2024-04-20)

  • Changed: IList.clone() returns a read-only list unchanged (i.e. still read-only) and has a generic return type, whereas copy() still makes a read-only list mutable
  • Added: IList.isReadOnly()
  • Bug fix: BigList.clone() / copy()

Release 0.9.22 (2023-12-22)

  • Improved: Brownies-Collections is compatible with Java 21. The introduction of SequencedCollection makes a refactoring of IList necessary. IList does not implement the Deque interface anymore, but offers asDeque() as replacement. See for details.
  • Added: IListable as uniform representation of list / array
  • Added: IList.immutableList() allows to easily create an immutable list
  • Improved: Memory consumption of immutable list has been reduced
  • Added: ICollectionTools.flatMap()
  • Added: IList.indexOf(Object, int)
  • Improved: Performance of adding/setting/replacing instances of Collection

Release 0.9.21 (2023-07-22)

  • Bug fix: null was not counted correctly in getCount() / getCountByKey()
  • Bug fix: in KeyList/KeySet removeAllByKey
  • Bug fix: withPrimaryElem()/withUniqueElem()
  • Added: ICollection: copy/crop
  • Added: Manifest has Automatic-Module-Name set and is OSGI aware

Release 0.9.20 (2023-04-24)

  • Bug fix: fix equals() for key collections with duplicate elements
  • Improved: performance of KeyListImpl.put()
  • Improved: remove KeyListImpl.addIf (slow due to exception), use IList.addIfAbsent instead
  • Added: IList map()/filter()/mapFilter()/filterMap()
  • Added: ICollection / ICollectionTools with getFirstOrNull(), getSingleOrNull, countIf(), etc.

Release 0.9.19 (2022-10-28)

  • Bug fix: Key2List.asMap2()
  • Improved: performance of withSetBehavior()

Release 0.9.18 (2022-07-29)

  • Improved: add field GapList.gapAddRight to exploit access pattern
  • Improved: reduced byte code size of methods to allow inlining
  • Improved: harden against overflow on growing

Release 0.9.17 (2022-04-27)

  • Bug fix: BigList.parallelStream()
  • Bug fix: Key collection removing an element with a null key
  • Bug fix: KeyLists were not completely immutable after unmodifiableList
  • Bug fix: CollectionAsSet: equals/hashCode
  • Added: IList.crop(), getCountIf(), IList.retain(int, int)
  • Improved: Speed up for withElemCount

Release 0.9.16 (2021-10-19)

  • Changed: groupId of Maven coordinates:
    New: org.magicwerk.brownies:brownies-collections:0.9.16
    Old: org.magicwerk:brownies-collections:0.9.15

Release 0.9.15 (2021-10-07)

  • Changed: IList: getIf() returns only one element, use filteredList() for several
  • Changed: IList: improve performance of remove(int,int) for special cases
  • Changed: IList: if a list is already unmodifiable, it is returned unchanged by unmodifiableList/copy
  • Bug fix: Fix iterator in KeyLists
  • Bug fix: Fix KeyList.initAll() if list is sorted but input not
  • Bug fix: Fix IList.equals
  • Bug fix: Fix KeyMap.crop()
  • Bug fix: Fix KeyCollectionImpl.KeyMap.containsValue() if collection has no elem map and key map is sorted
  • Added: KeySet, Key1Set, Key2Set
  • Added: GapLists: methods to read data directly from InputStream/Reader into ByteGapList/CharGapList

Release 0.9.14 (2016-09-27)

  • Changed: use Java 8 functional interfaces (use interfaces in java.util.function instead of org.magicwerk.brownies.collections.function)
  • Changed: Improve performance of contains() for key collections if keys are defined
  • Changed: Improve performance of IList.getAll()
  • Changed: Removed IList.getArray() removed, use toArray() instead
  • Bug fix: Fix contains() for key collections several elements had the same key
  • Bug fix: Fix containsIf()
  • Bug fix: Fix toArray() of primitive collections
  • Bug fix: IList.getSingleOrEmpty() for more than 1 value
  • Bug fix: Extending classes with getBuilder() did not work for KeyList, Key2List
  • Added: IList: getAny(), addArray()/setArray() accepting parts of array
  • Added: Key lists: putIfAbsentyByKey, unwrap

Release 0.9.13 (2016-04-14)

  • Bug fix: GapList.doEnsureCapacity()
    This bug makes GapList return invalid data in some cases. It is therefore recommended to upgrade to release 0.9.13.
  • Changed: withPrimaryKey()/withUniqueKey() now accept a mapper making calling withKeyMap() unnecesary
  • Changed: added method getAllKey() to key lists / key collection

Release 0.9.12 (2015-11-03)

  • Bug fix: Corrected behavior for put()/putByKey() for KeyLists with duplicates
  • Bug fix: Made behavior of asSet()/asMap1()/asMap2() consistent
  • Bug fix: toArray() if KeyLists were using primitives
  • Bug fix: setAll() on sorted key lists
  • Bug fix: removeAll()/retainAll() now also throw NPE with null argument on empty list
  • Bug fix: improved error checking on sort() for key lists

Release 0.9.11 (2015-09-08)

  • Bug fix: Sharing blocks after copying BigList did not work
  • Bug fix: invalidateKey() failed for sorted key lists
  • Bug fix: removeAll(), replaceAll() for key collections
  • Changed: renamed some builder methods for key collections

Release 0.9.10 (2015-04-24)

  • Bug fix: KeyList's getAllByKey() if list was sorted

Release 0.9.9 (2015-03-03)

  • Added: IList: indexOf(Object, int) / lastIndexOf(Object, int)
  • Added: IList: put() / addIfAbsent()
  • Added: IList: initAll()/initArray()/initMult(), addAll()/addArray()/addMult(), setAll()/setArray()/setMult()
  • Added: IList: putAlll()/putArray()/putMult(), replaceAll()/replaceArray()/replaceMult()
  • Added: IList: transferCopy()/transferMove()/transferRemove()/transferSwap()
  • Bug fix: KeyListImpl.removeAllByKey failed if list was sorted
  • Bug fix: BigList.sort
  • Bug fix: Key collections: clone/copy/crop failed with duplicates
  • Changed: functional interfaces renamed to Java 8 style: IConsumer, IFunction, IPredicate, ISupplier
  • Changed: rename Key1Collection.puByKey1 to putByKey1

Release 0.9.8 (2014-10-28)

  • Bug fix: GapList.doEnsureCapacity()
    This bug makes GapList return invalid data in some cases. It is therefore recommended to upgrade to release 0.9.8.
  • Added: BigList
    BigList is a list optimized for storing large number of elements.
  • Added: IntBigList, LongBigList, etc.
    Specialized versions of BigList storing primitive ints, longs, etc.
  • Added: IntObjBigList, LongObjBigList, etc.
    Version of IntBigList, etc. which allow access through the standard List interface.

Release 0.9.7 (2014-08-08)

  • Bug fix: GapList.doEnsureCapacity()
    This bug makes GapList return invalid data in some cases. It is therefore recommended to upgrade to release 0.9.7.
  • Added: drag(), addIfAbsent() to GapList
  • Added: addIf() to KeyList
  • Changed: triggers beforeInsert/afterInsert, beforeDelete/afterDelete
  • Bug fix: GapList.rotate()

Release 0.9.6 (2014-03-25)

  • Added: mappedList(), filter() to GapList
  • Added: Key1List.asMap1()
  • Bug fix: for getAll, getCount, getDistinct, removeAll which did not work for key lists without element set
  • Bug fix: for add() with withWindowSize() set
  • Bug fix: for asMap2()
  • Bug fix: wrong type in withKey2Map
  • Bug fix: wrong index in withKey2Sort

Release 0.9.5 (2014-01-24)

  • Bug fix in removeFirst(), removeLast() if empty
  • Bug fix in clone(), copy(), crop()
  • Bug fixes in builders
  • Perfomance improvments for GapList and all KeyCollections/KeyLists

Release 0.9.4 (2013-10-22)

  • Added: Classes KeyCollection, Key1Collection, Key2Collection
  • Added: Classes KeyList, Key1List, Key2List
  • Added: Class IntObjGapList, LongObjGapList, etc. which make IntGapList implementing List interface
  • Change: GapList.get(int, int) has been renamed to GapList.getAll(int, int)
  • Change: Class MaxList has gone, the functionality has been implemented in KeyList
  • Bug fix: GapList.iterator(), GapList().retainAll()

Release 0.9.3 (2013-03-02)

  • Bug fix: init(), resize(), move()
  • Bug fix: IntGapList.equals() (all primitive types)
  • Bug fix: Handling of NaN in DoubleGapList / FloatGapList
  • Added: containsAny()

Release 0.9.2 (2012-07-25)

  • Bug fix: assertion failed in addAll()
  • Bug fix: MaxList did not work properly
  • Bug fix: corrected usage of GapLists as arguments (? extends E)

Release 0.9.1 (2012-07-24)

  • Bug fix: data corruption if the capacity of an empty list was increased
  • Enhancement: New methods getArray(), setAll(), init(), resize(), fill(), unmodifiableList()
  • Internal: protected methods doGet(), doAdd(), doRemove(), doSet(), doReSet(), doModify() provide clean interface for validation etc.

Release 0.9 (2012-03-12)

  • First release.