implements ConcurrentNavigableMap<K, V> Cloneable Serializable
A scalable concurrent ConcurrentNavigableMap
implementation.
The map is sorted according to the {@linkplain Comparable natural
ordering} of its keys, or by a Comparator
provided at map
creation time, depending on which constructor is used.
This class implements a concurrent variant of SkipLists
providing expected average log(n) time cost for the
containsKey
, get
, put
and
remove
operations and their variants. Insertion, removal,
update, and access operations safely execute concurrently by
multiple threads.
Iterators and spliterators are weakly consistent.
Ascending key ordered views and their iterators are faster than descending ones.
All Map.Entry
pairs returned by methods in this class
and its views represent snapshots of mappings at the time they were
produced. They do not support the Entry.setValue
method. (Note however that it is possible to change mappings in the
associated map using put
, putIfAbsent
, or
replace
, depending on exactly which effect you need.)
Beware that, unlike in most collections, the size
method is not a constant-time operation. Because of the
asynchronous nature of these maps, determining the current number
of elements requires a traversal of the elements, and so may report
inaccurate results if this collection is modified during traversal.
Additionally, the bulk operations putAll
, equals
,
toArray
, containsValue
, and clear
are
not guaranteed to be performed atomically. For example, an
iterator operating concurrently with a putAll
operation
might view only some of the added elements.
This class and its views and iterators implement all of the
optional methods of the Map
and Iterator
interfaces. Like most other concurrent collections, this class does
not permit the use of null
keys or values because some
null return values cannot be reliably distinguished from the absence of
elements.
Public Constructor Summary
ConcurrentSkipListMap()
Constructs a new, empty map, sorted according to the
{@linkplain Comparable natural ordering} of the keys.
|
|
ConcurrentSkipListMap(Comparator<? super K> comparator)
Constructs a new, empty map, sorted according to the specified
comparator.
|
|
ConcurrentSkipListMap(Map<? extends K, ? extends V> m)
Constructs a new map containing the same mappings as the given map,
sorted according to the {@linkplain Comparable natural ordering} of
the keys.
|
|
ConcurrentSkipListMap(SortedMap<K, ? extends V> m)
Constructs a new map containing the same mappings and using the
same ordering as the specified sorted map.
|
Public Method Summary
Entry<K, V> |
ceilingEntry(K key)
Returns a key-value mapping associated with the least key
greater than or equal to the given key, or
null if
there is no such entry. |
K |
ceilingKey(K key)
Returns the least key greater than or equal to the given key,
or
null if there is no such key. |
void |
clear()
Removes all of the mappings from this map.
|
ConcurrentSkipListMap<K, V> |
clone()
Returns a shallow copy of this
ConcurrentSkipListMap
instance. |
Comparator<? super K> |
comparator()
Returns the comparator used to order the keys in this map, or
null if this map uses the {@linkplain Comparable
natural ordering} of its keys. |
V |
compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Attempts to compute a mapping for the specified key and its
current mapped value (or
null if there is no current
mapping). |
V |
computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
If the specified key is not already associated with a value,
attempts to compute its value using the given mapping function
and enters it into this map unless
null . |
V |
computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
If the value for the specified key is present, attempts to
compute a new mapping given the key and its current mapped
value.
|
boolean | |
boolean | |
NavigableSet<K> |
descendingKeySet()
Returns a reverse order
NavigableSet view of the keys contained in this map. |
ConcurrentNavigableMap<K, V> |
descendingMap()
Returns a reverse order view of the mappings contained in this map.
|
Set<Entry<K, V>> | |
boolean | |
Entry<K, V> |
firstEntry()
Returns a key-value mapping associated with the least
key in this map, or
null if the map is empty. |
K |
firstKey()
Returns the first (lowest) key currently in this map.
|
Entry<K, V> |
floorEntry(K key)
Returns a key-value mapping associated with the greatest key
less than or equal to the given key, or
null if there
is no such key. |
K |
floorKey(K key)
Returns the greatest key less than or equal to the given key,
or
null if there is no such key. |
void |
forEach(BiConsumer<? super K, ? super V> action)
Performs the given action for each entry in this map until all entries
have been processed or the action throws an exception.
|
V | |
V |
getOrDefault(Object key, V defaultValue)
Returns the value to which the specified key is mapped,
or the given defaultValue if this map contains no mapping for the key.
|
ConcurrentNavigableMap<K, V> |
headMap(K toKey)
Returns a view of the portion of this map whose keys are
strictly less than
toKey .
Equivalent to |
ConcurrentNavigableMap<K, V> |
headMap(K toKey, boolean inclusive)
Returns a view of the portion of this map whose keys are less than (or
equal to, if
inclusive is true) toKey . |
Entry<K, V> |
higherEntry(K key)
Returns a key-value mapping associated with the least key
strictly greater than the given key, or
null if there
is no such key. |
K |
higherKey(K key)
Returns the least key strictly greater than the given key, or
null if there is no such key. |
boolean |
isEmpty()
Returns
true if this map contains no key-value mappings. |
NavigableSet<K> |
keySet()
Returns a
NavigableSet view of the keys contained in this map. |
Entry<K, V> |
lastEntry()
Returns a key-value mapping associated with the greatest
key in this map, or
null if the map is empty. |
K |
lastKey()
Returns the last (highest) key currently in this map.
|
Entry<K, V> |
lowerEntry(K key)
Returns a key-value mapping associated with the greatest key
strictly less than the given key, or
null if there is
no such key. |
K |
lowerKey(K key)
Returns the greatest key strictly less than the given key, or
null if there is no such key. |
V |
merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)
If the specified key is not already associated with a value,
associates it with the given value.
|
NavigableSet<K> |
navigableKeySet()
Returns a
NavigableSet view of the keys contained in this map. |
Entry<K, V> |
pollFirstEntry()
Removes and returns a key-value mapping associated with
the least key in this map, or
null if the map is empty. |
Entry<K, V> |
pollLastEntry()
Removes and returns a key-value mapping associated with
the greatest key in this map, or
null if the map is empty. |
V |
put(K key, V value)
Associates the specified value with the specified key in this map.
|
V |
putIfAbsent(K key, V value)
If the specified key is not already associated
with a value, associates it with the given value.
|
boolean | |
V | |
boolean |
replace(K key, V oldValue, V newValue)
Replaces the entry for a key only if currently mapped to a given value.
|
V |
replace(K key, V value)
Replaces the entry for a key only if currently mapped to some value.
|
void |
replaceAll(BiFunction<? super K, ? super V, ? extends V> function)
Replaces each entry's value with the result of invoking the given
function on that entry until all entries have been processed or the
function throws an exception.
|
int |
size()
Returns the number of key-value mappings in this map.
|
ConcurrentNavigableMap<K, V> |
subMap(K fromKey, K toKey)
Returns a view of the portion of this map whose keys range from
fromKey , inclusive, to toKey , exclusive.
Equivalent to |
ConcurrentNavigableMap<K, V> |
subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
Returns a view of the portion of this map whose keys range from
fromKey to toKey . |
ConcurrentNavigableMap<K, V> |
tailMap(K fromKey, boolean inclusive)
Returns a view of the portion of this map whose keys are greater than (or
equal to, if
inclusive is true) fromKey . |
ConcurrentNavigableMap<K, V> |
tailMap(K fromKey)
Returns a view of the portion of this map whose keys are
greater than or equal to
fromKey .
Equivalent to |
Collection<V> |
values()
Returns a
Collection view of the values contained in this map. |
Inherited Method Summary
Public Constructors
public ConcurrentSkipListMap ()
Constructs a new, empty map, sorted according to the {@linkplain Comparable natural ordering} of the keys.
public ConcurrentSkipListMap (Comparator<? super K> comparator)
Constructs a new, empty map, sorted according to the specified comparator.
Parameters
comparator | the comparator that will be used to order this map.
If null , the {@linkplain Comparable natural
ordering} of the keys will be used.
|
---|
public ConcurrentSkipListMap (Map<? extends K, ? extends V> m)
Constructs a new map containing the same mappings as the given map, sorted according to the {@linkplain Comparable natural ordering} of the keys.
Parameters
m | the map whose mappings are to be placed in this map |
---|
Throws
ClassCastException | if the keys in m are not
Comparable , or are not mutually comparable |
---|---|
NullPointerException | if the specified map or any of its keys or values are null |
public ConcurrentSkipListMap (SortedMap<K, ? extends V> m)
Constructs a new map containing the same mappings and using the same ordering as the specified sorted map.
Parameters
m | the sorted map whose mappings are to be placed in this map, and whose comparator is to be used to sort this map |
---|
Throws
NullPointerException | if the specified sorted map or any of its keys or values are null |
---|
Public Methods
public Entry<K, V> ceilingEntry (K key)
Returns a key-value mapping associated with the least key
greater than or equal to the given key, or null
if
there is no such entry. The returned entry does not
support the Entry.setValue
method.
Parameters
key | the key |
---|
Returns
- an entry with the least key greater than or equal to
key
, ornull
if there is no such key
Throws
ClassCastException | |
---|---|
NullPointerException | if the specified key is null |
public K ceilingKey (K key)
Returns the least key greater than or equal to the given key,
or null
if there is no such key.
Parameters
key | the key |
---|
Returns
- the least key greater than or equal to
key
, ornull
if there is no such key
Throws
ClassCastException | |
---|---|
NullPointerException | if the specified key is null |
public void clear ()
Removes all of the mappings from this map.
public ConcurrentSkipListMap<K, V> clone ()
Returns a shallow copy of this ConcurrentSkipListMap
instance. (The keys and values themselves are not cloned.)
Returns
- a shallow copy of this map
public Comparator<? super K> comparator ()
Returns the comparator used to order the keys in this map, or
null
if this map uses the {@linkplain Comparable
natural ordering} of its keys.
Returns
- the comparator used to order the keys in this map,
or
null
if this map uses the natural ordering of its keys
public V compute (K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
Attempts to compute a mapping for the specified key and its
current mapped value (or null
if there is no current
mapping). The function is NOT guaranteed to be applied
once atomically.
Parameters
key | key with which the specified value is to be associated |
---|---|
remappingFunction | the function to compute a value |
Returns
- the new value associated with the specified key, or null if none
Throws
NullPointerException | if the specified key is null or the remappingFunction is null |
---|
public V computeIfAbsent (K key, Function<? super K, ? extends V> mappingFunction)
If the specified key is not already associated with a value,
attempts to compute its value using the given mapping function
and enters it into this map unless null
. The function
is NOT guaranteed to be applied once atomically only
if the value is not present.
Parameters
key | key with which the specified value is to be associated |
---|---|
mappingFunction | the function to compute a value |
Returns
- the current (existing or computed) value associated with the specified key, or null if the computed value is null
Throws
NullPointerException | if the specified key is null or the mappingFunction is null |
---|
public V computeIfPresent (K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
If the value for the specified key is present, attempts to compute a new mapping given the key and its current mapped value. The function is NOT guaranteed to be applied once atomically.
Parameters
key | key with which a value may be associated |
---|---|
remappingFunction | the function to compute a value |
Returns
- the new value associated with the specified key, or null if none
Throws
NullPointerException | if the specified key is null or the remappingFunction is null |
---|
public boolean containsKey (Object key)
Returns true
if this map contains a mapping for the specified
key.
Parameters
key | key whose presence in this map is to be tested |
---|
Returns
true
if this map contains a mapping for the specified key
Throws
ClassCastException | if the specified key cannot be compared with the keys currently in the map |
---|---|
NullPointerException | if the specified key is null |
public boolean containsValue (Object value)
Returns true
if this map maps one or more keys to the
specified value. This operation requires time linear in the
map size. Additionally, it is possible for the map to change
during execution of this method, in which case the returned
result may be inaccurate.
Parameters
value | value whose presence in this map is to be tested |
---|
Returns
true
if a mapping tovalue
exists;false
otherwise
Throws
NullPointerException | if the specified value is null |
---|
public NavigableSet<K> descendingKeySet ()
Returns a reverse order NavigableSet
view of the keys contained in this map.
The set's iterator returns the keys in descending order.
The set is backed by the map, so changes to the map are
reflected in the set, and vice-versa. The set supports element
removal, which removes the corresponding mapping from the map,
via the Iterator.remove
, Set.remove
,
removeAll
, retainAll
, and clear
operations. It does not support the add
or addAll
operations.
The view's iterators and spliterators are weakly consistent.
Returns
- a reverse order navigable set view of the keys in this map
public ConcurrentNavigableMap<K, V> descendingMap ()
Returns a reverse order view of the mappings contained in this map. The descending map is backed by this map, so changes to the map are reflected in the descending map, and vice-versa.
The returned map has an ordering equivalent to
Collections.reverseOrder
(comparator())
.
The expression m.descendingMap().descendingMap()
returns a
view of m
essentially equivalent to m
.
Returns
- a reverse order view of this map
public Set<Entry<K, V>> entrySet ()
Returns a Set
view of the mappings contained in this map.
The set's iterator returns the entries in ascending key order. The
set's spliterator additionally reports Spliterator.CONCURRENT
,
Spliterator.NONNULL
, Spliterator.SORTED
and
Spliterator.ORDERED
, with an encounter order that is ascending
key order.
The set is backed by the map, so changes to the map are
reflected in the set, and vice-versa. The set supports element
removal, which removes the corresponding mapping from the map,
via the Iterator.remove
, Set.remove
,
removeAll
, retainAll
and clear
operations. It does not support the add
or
addAll
operations.
The view's iterators and spliterators are weakly consistent.
The Map.Entry
elements traversed by the iterator
or spliterator
do not support the setValue
operation.
Returns
- a set view of the mappings contained in this map, sorted in ascending key order