Here’s an implementation of a multiset in Java 8. It uses a Map<T, Integer>
to count how many times an object was inserted (multiplicity). It is not thread-safe, but there’s synchronizedMultiset(...)
and it always knows the current size in O(1)
. With the method asMap()
you can get a view of the multiset as a Map
, that will allow modification of the underlying multiset.
The code is on GitHub: github.com/claudemartin/multiset
This started as a simple implementation and is not rather complex. The iterator allows to remove elements during iteration. I tried to write my own Spliterator
, but it wasn’t faster than the default implementaion. Many methods are optimized and I added some set operations for multisets (union, intersect, minus). With merge(...)
you can merge two multisets with any operation.