org.compass.core.util.backport.java.util.concurrent
Class ConcurrentSkipListMap

java.lang.Object
  extended by java.util.AbstractMap
      extended by org.compass.core.util.backport.java.util.AbstractMap
          extended by org.compass.core.util.backport.java.util.concurrent.ConcurrentSkipListMap
All Implemented Interfaces:
Serializable, Cloneable, Map, SortedMap, ConcurrentMap, ConcurrentNavigableMap, NavigableMap

public class ConcurrentSkipListMap
extends AbstractMap
implements ConcurrentNavigableMap, Cloneable, Serializable

A scalable concurrent ConcurrentNavigableMap implementation. The map is sorted according to the 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 are weakly consistent, returning elements reflecting the state of the map at some point at or since the creation of the iterator. They do not throw ConcurrentModificationException, and may proceed concurrently with other operations. 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. Additionally, the bulk operations putAll, equals, 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.

This class is a member of the Java Collections Framework.

Since:
1.6
Author:
Doug Lea
See Also:
Serialized Form

Nested Class Summary
(package private) static class ConcurrentSkipListMap.ComparableUsingComparator
          Represents a key with a comparator as a Comparable.
(package private)  class ConcurrentSkipListMap.EntryIterator
           
(package private) static class ConcurrentSkipListMap.EntrySet
           
(package private) static class ConcurrentSkipListMap.HeadIndex
          Nodes heading each level keep track of their level.
(package private) static class ConcurrentSkipListMap.Index
          Index nodes represent the levels of the skip list.
(package private)  class ConcurrentSkipListMap.Iter
          Base of iterator classes:
(package private)  class ConcurrentSkipListMap.KeyIterator
           
(package private) static class ConcurrentSkipListMap.KeySet
           
(package private) static class ConcurrentSkipListMap.Node
          Nodes hold keys and values, and are singly linked in sorted order, possibly with some intervening marker nodes.
(package private) static class ConcurrentSkipListMap.SubMap
          Submaps returned by ConcurrentSkipListMap submap operations represent a subrange of mappings of their underlying maps.
(package private)  class ConcurrentSkipListMap.ValueIterator
           
(package private) static class ConcurrentSkipListMap.Values
           
 
Nested classes/interfaces inherited from class org.compass.core.util.backport.java.util.AbstractMap
AbstractMap.SimpleEntry, AbstractMap.SimpleImmutableEntry
 
Constructor Summary
ConcurrentSkipListMap()
          Constructs a new, empty map, sorted according to the natural ordering of the keys.
ConcurrentSkipListMap(Comparator comparator)
          Constructs a new, empty map, sorted according to the specified comparator.
ConcurrentSkipListMap(Map m)
          Constructs a new map containing the same mappings as the given map, sorted according to the natural ordering of the keys.
ConcurrentSkipListMap(SortedMap m)
          Constructs a new map containing the same mappings and using the same ordering as the specified sorted map.
 
Method Summary
 Map.Entry ceilingEntry(Object 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.
 Object ceilingKey(Object 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.
 Object clone()
          Returns a shallow copy of this ConcurrentSkipListMap instance.
 Comparator comparator()
           
(package private)  int compare(Object k1, Object k2)
          Compares using comparator or natural ordering.
 boolean containsKey(Object key)
          Returns true if this map contains a mapping for the specified key.
 boolean containsValue(Object value)
          Returns true if this map maps one or more keys to the specified value.
 NavigableSet descendingKeySet()
          Returns a reverse order NavigableSet view of the keys contained in this map.
 NavigableMap descendingMap()
          Returns a reverse order view of the mappings contained in this map.
(package private)  Object doRemove(Object okey, Object value)
          Main deletion method.
(package private)  Map.Entry doRemoveFirstEntry()
          Removes first entry; returns its snapshot.
(package private)  Map.Entry doRemoveLastEntry()
          Removes last entry; returns its snapshot.
(package private)  Iterator entryIterator()
           
 Set entrySet()
          Returns a Set view of the mappings contained in this map.
 boolean equals(Object o)
          Compares the specified object with this map for equality.
(package private)  ConcurrentSkipListMap.Node findFirst()
          Specialized variant of findNode to get first valid node.
(package private)  ConcurrentSkipListMap.Node findLast()
          Specialized version of find to get last valid node.
(package private)  ConcurrentSkipListMap.Node findNear(Object kkey, int rel)
          Utility for ceiling, floor, lower, higher methods.
 Map.Entry firstEntry()
          Returns a key-value mapping associated with the least key in this map, or null if the map is empty.
 Object firstKey()
           
 Map.Entry floorEntry(Object 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.
 Object floorKey(Object key)
          Returns the greatest key less than or equal to the given key, or null if there is no such key.
 Object get(Object key)
          Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.
(package private)  AbstractMap.SimpleImmutableEntry getNear(Object key, int rel)
          Returns SimpleImmutableEntry for results of findNear.
 SortedMap headMap(Object toKey)
           Equivalent to headMap(toKey, false).
 NavigableMap headMap(Object 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.
 Map.Entry higherEntry(Object 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.
 Object higherKey(Object key)
          Returns the least key strictly greater than the given key, or null if there is no such key.
(package private)  boolean inHalfOpenRange(Object key, Object least, Object fence)
          Returns true if given key greater than or equal to least and strictly less than fence, bypassing either test if least or fence are null.
(package private)  void initialize()
          Initializes or resets state.
(package private)  boolean inOpenRange(Object key, Object least, Object fence)
          Returns true if given key greater than or equal to least and less or equal to fence.
 boolean isEmpty()
          Returns true if this map contains no key-value mappings.
(package private)  Iterator keyIterator()
           
 Set keySet()
          Returns a NavigableSet view of the keys contained in this map.
 Map.Entry lastEntry()
          Returns a key-value mapping associated with the greatest key in this map, or null if the map is empty.
 Object lastKey()
           
 Map.Entry lowerEntry(Object 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.
 Object lowerKey(Object key)
          Returns the greatest key strictly less than the given key, or null if there is no such key.
 NavigableSet navigableKeySet()
          Returns a NavigableSet view of the keys contained in this map.
 Map.Entry pollFirstEntry()
          Removes and returns a key-value mapping associated with the least key in this map, or null if the map is empty.
 Map.Entry pollLastEntry()
          Removes and returns a key-value mapping associated with the greatest key in this map, or null if the map is empty.
 Object put(Object key, Object value)
          Associates the specified value with the specified key in this map.
 Object putIfAbsent(Object key, Object value)
          If the specified key is not already associated with a value, associate it with the given value.
 Object remove(Object key)
          Removes the mapping for the specified key from this map if present.
 boolean remove(Object key, Object value)
          Removes the entry for a key only if currently mapped to a given value.
 Object replace(Object key, Object value)
          Replaces the entry for a key only if currently mapped to some value.
 boolean replace(Object key, Object oldValue, Object newValue)
          Replaces the entry for a key only if currently mapped to a given value.
 int size()
          Returns the number of key-value mappings in this map.
 NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive)
          Returns a view of the portion of this map whose keys range from fromKey to toKey.
 SortedMap subMap(Object fromKey, Object toKey)
           Equivalent to subMap(fromKey, true, toKey, false).
 SortedMap tailMap(Object fromKey)
           Equivalent to tailMap(fromKey, true).
 NavigableMap tailMap(Object 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.
(package private)  Iterator valueIterator()
           
 Collection values()
          Returns a Collection view of the values contained in this map.
 
Methods inherited from class java.util.AbstractMap
hashCode, putAll, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ConcurrentSkipListMap

public ConcurrentSkipListMap()
Constructs a new, empty map, sorted according to the natural ordering of the keys.


ConcurrentSkipListMap

public ConcurrentSkipListMap(Comparator 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 natural ordering of the keys will be used.

ConcurrentSkipListMap

public ConcurrentSkipListMap(Map m)
Constructs a new map containing the same mappings as the given map, sorted according to the 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

ConcurrentSkipListMap

public ConcurrentSkipListMap(SortedMap 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
Method Detail

initialize

final void initialize()
Initializes or resets state. Needed by constructors, clone, clear, readObject. and ConcurrentSkipListSet.clone. (Note that comparator must be separately initialized.)


compare

int compare(Object k1,
            Object k2)
      throws ClassCastException
Compares using comparator or natural ordering. Used when the ComparableUsingComparator approach doesn't apply.

Throws:
ClassCastException

inHalfOpenRange

boolean inHalfOpenRange(Object key,
                        Object least,
                        Object fence)
Returns true if given key greater than or equal to least and strictly less than fence, bypassing either test if least or fence are null. Needed mainly in submap operations.


inOpenRange

boolean inOpenRange(Object key,
                    Object least,
                    Object fence)
Returns true if given key greater than or equal to least and less or equal to fence. Needed mainly in submap operations.


doRemove

final Object doRemove(Object okey,
                      Object value)
Main deletion method. Locates node, nulls value, appends a deletion marker, unlinks predecessor, removes associated index nodes, and possibly reduces head index level. Index nodes are cleared out simply by calling findPredecessor. which unlinks indexes to deleted nodes found along path to key, which will include the indexes to this node. This is done unconditionally. We can't check beforehand whether there are index nodes because it might be the case that some or all indexes hadn't been inserted yet for this node during initial search for it, and we'd like to ensure lack of garbage retention, so must call to be sure.

Parameters:
okey - the key
value - if non-null, the value that must be associated with key
Returns:
the node, or null if not found

findFirst

ConcurrentSkipListMap.Node findFirst()
Specialized variant of findNode to get first valid node.

Returns:
first node or null if empty

doRemoveFirstEntry

Map.Entry doRemoveFirstEntry()
Removes first entry; returns its snapshot.

Returns:
null if empty, else snapshot of first entry

findLast

ConcurrentSkipListMap.Node findLast()
Specialized version of find to get last valid node.

Returns:
last node or null if empty

doRemoveLastEntry

Map.Entry doRemoveLastEntry()
Removes last entry; returns its snapshot. Specialized variant of doRemove.

Returns:
null if empty, else snapshot of last entry

findNear

ConcurrentSkipListMap.Node findNear(Object kkey,
                                    int rel)
Utility for ceiling, floor, lower, higher methods.

Parameters:
kkey - the key
rel - the relation -- OR'ed combination of EQ, LT, GT
Returns:
nearest node fitting relation, or null if no such

getNear

AbstractMap.SimpleImmutableEntry getNear(Object key,
                                         int rel)
Returns SimpleImmutableEntry for results of findNear.

Parameters:
key - the key
rel - the relation -- OR'ed combination of EQ, LT, GT
Returns:
Entry fitting relation, or null if no such

clone

public Object clone()
Returns a shallow copy of this ConcurrentSkipListMap instance. (The keys and values themselves are not cloned.)

Overrides:
clone in class AbstractMap
Returns:
a shallow copy of this map

containsKey

public boolean containsKey(Object key)
Returns true if this map contains a mapping for the specified key.

Specified by:
containsKey in interface Map
Overrides:
containsKey in class AbstractMap
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

get

public Object get(Object key)
Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.

More formally, if this map contains a mapping from a key k to a value v such that key compares equal to k according to the map's ordering, then this method returns v; otherwise it returns null. (There can be at most one such mapping.)

Specified by:
get in interface Map
Overrides:
get in class AbstractMap
Throws:
ClassCastException - if the specified key cannot be compared with the keys currently in the map
NullPointerException - if the specified key is null

put

public Object put(Object key,
                  Object value)
Associates the specified value with the specified key in this map. If the map previously contained a mapping for the key, the old value is replaced.

Specified by:
put in interface Map
Overrides:
put in class AbstractMap
Parameters:
key - key with which the specified value is to be associated
value - value to be associated with the specified key
Returns:
the previous value associated with the specified key, or null if there was no mapping for the key
Throws:
ClassCastException - if the specified key cannot be compared with the keys currently in the map
NullPointerException - if the specified key or value is null

remove

public Object remove(Object key)
Removes the mapping for the specified key from this map if present.

Specified by:
remove in interface Map
Overrides:
remove in class AbstractMap
Parameters:
key - key for which mapping should be removed
Returns:
the previous value associated with the specified key, or null if there was no mapping for the key
Throws:
ClassCastException - if the specified key cannot be compared with the keys currently in the map
NullPointerException - if the specified key is null

containsValue

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.

Specified by:
containsValue in interface Map
Overrides:
containsValue in class AbstractMap
Parameters:
value - value whose presence in this map is to be tested
Returns:
true if a mapping to value exists; false otherwise
Throws:
NullPointerException - if the specified value is null

size

public int size()
Returns the number of key-value mappings in this map. If this map contains more than Integer.MAX_VALUE elements, it returns Integer.MAX_VALUE.

Beware that, unlike in most collections, this method is NOT a constant-time operation. Because of the asynchronous nature of these maps, determining the current number of elements requires traversing them all to count them. Additionally, it is possible for the size to change during execution of this method, in which case the returned result will be inaccurate. Thus, this method is typically not very useful in concurrent applications.

Specified by:
size in interface Map
Overrides:
size in class AbstractMap
Returns:
the number of elements in this map

isEmpty

public boolean isEmpty()
Returns true if this map contains no key-value mappings.

Specified by:
isEmpty in interface Map
Overrides:
isEmpty in class AbstractMap
Returns:
true if this map contains no key-value mappings

clear

public void clear()
Removes all of the mappings from this map.

Specified by:
clear in interface Map
Overrides:
clear in class AbstractMap

keySet

public Set keySet()
Returns a NavigableSet view of the keys contained in this map. The set's iterator returns the keys in ascending 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 iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException, and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction.

This method is equivalent to method navigableKeySet.

Specified by:
keySet in interface Map
Specified by:
keySet in interface ConcurrentNavigableMap
Overrides:
keySet in class AbstractMap
Returns:
a navigable set view of the keys in this map

navigableKeySet

public NavigableSet navigableKeySet()
Description copied from interface: ConcurrentNavigableMap
Returns a NavigableSet view of the keys contained in this map. The set's iterator returns the keys in ascending 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 iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException, and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction.

Specified by:
navigableKeySet in interface ConcurrentNavigableMap
Specified by:
navigableKeySet in interface NavigableMap
Returns:
a navigable set view of the keys in this map

values

public Collection values()
Returns a Collection view of the values contained in this map. The collection's iterator returns the values in ascending order of the corresponding keys. The collection is backed by the map, so changes to the map are reflected in the collection, and vice-versa. The collection supports element removal, which removes the corresponding mapping from the map, via the Iterator.remove, Collection.remove, removeAll, retainAll and clear operations. It does not support the add or addAll operations.

The view's iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException, and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction.

Specified by:
values in interface Map
Overrides:
values in class AbstractMap

entrySet

public Set 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 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 iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException, and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction.

The Map.Entry elements returned by iterator.next() do not support the setValue operation.

Specified by:
entrySet in interface Map
Specified by:
entrySet in class AbstractMap
Returns:
a set view of the mappings contained in this map, sorted in ascending key order

descendingMap

public NavigableMap descendingMap()
Description copied from interface: ConcurrentNavigableMap
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.

Specified by:
descendingMap in interface ConcurrentNavigableMap
Specified by:
descendingMap in interface NavigableMap
Returns:
a reverse order view of this map

descendingKeySet

public NavigableSet descendingKeySet()
Description copied from interface: ConcurrentNavigableMap
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 iterator is a "weakly consistent" iterator that will never throw ConcurrentModificationException, and guarantees to traverse elements as they existed upon construction of the iterator, and may (but is not guaranteed to) reflect any modifications subsequent to construction.

Specified by:
descendingKeySet in interface ConcurrentNavigableMap
Specified by:
descendingKeySet in interface NavigableMap
Returns:
a reverse order navigable set view of the keys in this map

equals

public boolean equals(Object o)
Compares the specified object with this map for equality. Returns true if the given object is also a map and the two maps represent the same mappings. More formally, two maps m1 and m2 represent the same mappings if m1.entrySet().equals(m2.entrySet()). This operation may return misleading results if either map is concurrently modified during execution of this method.

Specified by:
equals in interface Map
Overrides:
equals in class AbstractMap
Parameters:
o - object to be compared for equality with this map
Returns:
true if the specified object is equal to this map

putIfAbsent

public Object putIfAbsent(Object key,
                          Object value)
If the specified key is not already associated with a value, associate it with the given value. This is equivalent to
   if (!map.containsKey(key))
       return map.put(key, value);
   else
       return map.get(key);
except that the action is performed atomically.

Specified by:
putIfAbsent in interface ConcurrentMap
Parameters:
key - key with which the specified value is to be associated
value - value to be associated with the specified key
Returns:
the previous value associated with the specified key, or null if there was no mapping for the key
Throws:
ClassCastException - if the specified key cannot be compared with the keys currently in the map
NullPointerException - if the specified key or value is null

remove

public boolean remove(Object key,
                      Object value)
Removes the entry for a key only if currently mapped to a given value. This is equivalent to
   if (map.containsKey(key) && map.get(key).equals(value)) {
       map.remove(key);
       return true;
   } else return false;
except that the action is performed atomically.

Specified by:
remove in interface ConcurrentMap
Parameters:
key - key with which the specified value is associated
value - value expected to be associated with the specified key
Returns:
true if the value was removed
Throws:
ClassCastException - if the specified key cannot be compared with the keys currently in the map
NullPointerException - if the specified key is null

replace

public boolean replace(Object key,
                       Object oldValue,
                       Object newValue)
Replaces the entry for a key only if currently mapped to a given value. This is equivalent to
   if (map.containsKey(key) && map.get(key).equals(oldValue)) {
       map.put(key, newValue);
       return true;
   } else return false;
except that the action is performed atomically.

Specified by:
replace in interface ConcurrentMap
Parameters:
key - key with which the specified value is associated
oldValue - value expected to be associated with the specified key
newValue - value to be associated with the specified key
Returns:
true if the value was replaced
Throws:
ClassCastException - if the specified key cannot be compared with the keys currently in the map
NullPointerException - if any of the arguments are null

replace

public Object replace(Object key,
                      Object value)
Replaces the entry for a key only if currently mapped to some value. This is equivalent to
   if (map.containsKey(key)) {
       return map.put(key, value);
   } else return null;
except that the action is performed atomically.

Specified by:
replace in interface ConcurrentMap
Parameters:
key - key with which the specified value is associated
value - value to be associated with the specified key
Returns:
the previous value associated with the specified key, or null if there was no mapping for the key
Throws:
ClassCastException - if the specified key cannot be compared with the keys currently in the map
NullPointerException - if the specified key or value is null

comparator

public Comparator comparator()
Specified by:
comparator in interface SortedMap

firstKey

public Object firstKey()
Specified by:
firstKey in interface SortedMap
Throws:
NoSuchElementException

lastKey

public Object lastKey()
Specified by:
lastKey in interface SortedMap
Throws:
NoSuchElementException

subMap

public NavigableMap subMap(Object fromKey,
                           boolean fromInclusive,
                           Object toKey,
                           boolean toInclusive)
Description copied from interface: NavigableMap
Returns a view of the portion of this map whose keys range from fromKey to toKey. If fromKey and toKey are equal, the returned map is empty unless fromExclusive and toExclusive are both true. The returned map is backed by this map, so changes in the returned map are reflected in this map, and vice-versa. The returned map supports all optional map operations that this map supports.

The returned map will throw an IllegalArgumentException on an attempt to insert a key outside of its range, or to construct a submap either of whose endpoints lie outside its range.

Specified by:
subMap in interface ConcurrentNavigableMap
Specified by:
subMap in interface NavigableMap
Parameters:
fromKey - low endpoint of the keys in the returned map
fromInclusive - true if the low endpoint is to be included in the returned view
toKey - high endpoint of the keys in the returned map
toInclusive - true if the high endpoint is to be included in the returned view
Returns:
a view of the portion of this map whose keys range from fromKey to toKey
Throws:
ClassCastException - if fromKey and toKey cannot be compared to one another using this map's comparator (or, if the map has no comparator, using natural ordering). Implementations may, but are not required to, throw this exception if fromKey or toKey cannot be compared to keys currently in the map.
NullPointerException - if fromKey or toKey is null
IllegalArgumentException - if fromKey is greater than toKey; or if this map itself has a restricted range, and fromKey or toKey lies outside the bounds of the range

headMap

public NavigableMap headMap(Object toKey,
                            boolean inclusive)
Description copied from interface: NavigableMap
Returns a view of the portion of this map whose keys are less than (or equal to, if inclusive is true) toKey. The returned map is backed by this map, so changes in the returned map are reflected in this map, and vice-versa. The returned map supports all optional map operations that this map supports.

The returned map will throw an IllegalArgumentException on an attempt to insert a key outside its range.

Specified by:
headMap in interface ConcurrentNavigableMap
Specified by:
headMap in interface NavigableMap
Parameters:
toKey - high endpoint of the keys in the returned map
inclusive - true if the high endpoint is to be included in the returned view
Returns:
a view of the portion of this map whose keys are less than (or equal to, if inclusive is true) toKey
Throws:
ClassCastException - if toKey is not compatible with this map's comparator (or, if the map has no comparator, if toKey does not implement Comparable). Implementations may, but are not required to, throw this exception if toKey cannot be compared to keys currently in the map.
NullPointerException - if toKey is null
IllegalArgumentException - if this map itself has a restricted range, and toKey lies outside the bounds of the range

tailMap

public NavigableMap tailMap(Object fromKey,
                            boolean inclusive)
Description copied from interface: NavigableMap
Returns a view of the portion of this map whose keys are greater than (or equal to, if inclusive is true) fromKey. The returned map is backed by this map, so changes in the returned map are reflected in this map, and vice-versa. The returned map supports all optional map operations that this map supports.

The returned map will throw an IllegalArgumentException on an attempt to insert a key outside its range.

Specified by:
tailMap in interface ConcurrentNavigableMap
Specified by:
tailMap in interface NavigableMap
Parameters:
fromKey - low endpoint of the keys in the returned map
inclusive - true if the low endpoint is to be included in the returned view
Returns:
a view of the portion of this map whose keys are greater than (or equal to, if inclusive is true) fromKey
Throws:
ClassCastException - if fromKey is not compatible with this map's comparator (or, if the map has no comparator, if fromKey does not implement Comparable). Implementations may, but are not required to, throw this exception if fromKey cannot be compared to keys currently in the map.
NullPointerException - if fromKey is null
IllegalArgumentException - if this map itself has a restricted range, and fromKey lies outside the bounds of the range

subMap

public SortedMap subMap(Object fromKey,
                        Object toKey)
Description copied from interface: NavigableMap

Equivalent to subMap(fromKey, true, toKey, false).

Specified by:
subMap in interface SortedMap
Specified by:
subMap in interface ConcurrentNavigableMap
Specified by:
subMap in interface NavigableMap
Throws:
ClassCastException
NullPointerException - if fromKey or toKey is null
IllegalArgumentException

headMap

public SortedMap headMap(Object toKey)
Description copied from interface: NavigableMap

Equivalent to headMap(toKey, false).

Specified by:
headMap in interface SortedMap
Specified by:
headMap in interface ConcurrentNavigableMap
Specified by:
headMap in interface NavigableMap
Throws:
ClassCastException
NullPointerException - if toKey is null
IllegalArgumentException

tailMap

public SortedMap tailMap(Object fromKey)
Description copied from interface: NavigableMap

Equivalent to tailMap(fromKey, true).

Specified by:
tailM