public final class MapMaker extends Object
A builder of ConcurrentMap
instances having any combination of the following features:
Usage example:
<p>
ConcurrentMap<Request, Stopwatch> timers = new MapMaker()
.concurrencyLevel(4)
.weakKeys()
.makeMap();
These features are all optional; new MapMaker().makeMap()
returns a valid concurrent
map that behaves similarly to a ConcurrentHashMap
.
The returned map is implemented as a hash table with similar performance characteristics to
ConcurrentHashMap
. It supports all optional operations of the ConcurrentMap
interface. It does not permit null keys or values.
Note: by default, the returned map uses equality comparisons (the equals
method) to determine equality for keys or values. However, if #weakKeys
was
specified, the map uses identity (==
) comparisons instead for keys. Likewise, if #weakValues
or #softValues
was specified, the map uses identity comparisons for values.
The view collections of the returned map have weakly consistent iterators. This means
that they are safe for concurrent use, but if other threads modify the map after the iterator is
created, it is undefined which of these changes, if any, are reflected in that iterator. These
iterators never throw ConcurrentModificationException
.
If #weakKeys
, #weakValues
, or #softValues
are requested, it is
possible for a key or value present in the map to be reclaimed by the garbage collector. Entries
with reclaimed keys or values may be removed from the map on each map modification or on
occasional map accesses; such entries may be counted by Map.size()
, but will never be
visible to read or write operations. A partially-reclaimed entry is never exposed to the user.
Any Map.Entry
instance retrieved from the map's
entry set is a snapshot of that entry's state at the time of
retrieval; such entries do, however, support Map.Entry#setValue
, which simply
calls Map.put(K, V)
on the entry's key.
The maps produced by MapMaker
are serializable, and the deserialized maps retain all
the configuration properties of the original map. During deserialization, if the original map had
used soft or weak references, the entries are reconstructed as they were, but it's not unlikely
they'll be quickly garbage-collected before they are ever accessed.
new MapMaker().weakKeys().makeMap()
is a recommended replacement for WeakHashMap
, but note that it compares keys using object identity whereas WeakHashMap
uses Object.equals(java.lang.Object)
.
Constructor and Description |
---|
MapMaker() |
Modifier and Type | Method and Description |
---|---|
String |
toString()
Returns a string representation for this MapMaker instance.
|
Copyright © 2007-2024, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.