# Class TreeMap<K,V>

java.lang.Object
java.util.AbstractMap<K,V>
java.util.TreeMap<K,V>

All Implemented Interfaces:
  `Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>`

public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>

TreeMap is an implementation of SortedMap. All optional operations (adding and removing) are supported. The values can be any objects. The keys can be any objects which are comparable to each other either using their natural

Type parameter `K`: type of key Type parameter `V`: type of value

##### Since

1.2

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from class AbstractMap

  `AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `TreeMap()`
  Constructs a new empty `TreeMap` instance.
  `TreeMap(Comparator<? super K> comparator)`
  Constructs a new empty `TreeMap` instance with the specified comparator.
  `TreeMap(Map<? extends K, ? extends V> map)`
  Constructs a new `TreeMap` instance containing the mappings from the specified map and using natural ordering.
  `TreeMap(SortedMap<K, ? extends V> map)`
  Constructs a new `TreeMap` instance containing the mappings from the specified SortedMap and using the same comparator.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Map.Entry<K,V>`
  `ceilingEntry(K key)`
  Answers an entry related with the smallest key greater than or equal to the specified key, or null if no such key.
  `K`
  `ceilingKey(K key)`
  Answers the smallest key greater than or equal to the specified key, or null if no such key.
  `void`
  `clear()`
  Removes all mappings from this TreeMap, leaving it empty.
  `Comparator<? super K>`
  `comparator()`
  Returns the comparator used to compare elements in this map.
  `boolean`
  `containsKey(java.lang.Object key)`
  Returns whether this map contains the specified key.
  `boolean`
  `containsValue(java.lang.Object value)`
  Returns whether this map contains the specified value.
  `NavigableSet<K>`
  `descendingKeySet()`
  Answers a NavigableSet view of the keys in descending order.
  `NavigableMap<K,V>`
  `descendingMap()`
  Answers a reverse order view of the map.
  `Set<Map.Entry<K,V>>`
  `entrySet()`
  Returns a set containing all of the mappings in this map.
  `Map.Entry<K,V>`
  `firstEntry()`
  Answers the entry with the smallest key, or null if the map is empty.
  `K`
  `firstKey()`
  Returns the first key in this map.
  `Map.Entry<K,V>`
  `floorEntry(K key)`
  Answers an entry related with the biggest key less than or equal to the specified key, or null if no such key.
  `K`
  `floorKey(K key)`
  Answers the biggest key less than or equal to the specified key, or null if no such key.
  `V`
  `get(java.lang.Object key)`
  Returns the value of the mapping with the specified key.
  `SortedMap<K,V>`
  `headMap(K endKey)`
  Returns a sorted map over a range of this sorted map with all keys that are less than the specified `endKey`.
  `NavigableMap<K,V>`
  `headMap(K end, boolean inclusive)`
  Answers a view of the head of the map whose keys are smaller than (or equal to, depends on inclusive argument) endKey.
  `Map.Entry<K,V>`
  `higherEntry(K key)`
  Answers an entry related with the smallest key greater than the specified key, or null if no such key.
  `K`
  `higherKey(K key)`
  Answers the smallest key greater than the specified key, or null if no such key.
  `Set<K>`
  `keySet()`
  Returns a set of the keys contained in this map.
  `Map.Entry<K,V>`
  `lastEntry()`
  Answers the entry with the biggest key, or null if the map is empty.
  `K`
  `lastKey()`
  Returns the last key in this map.
  `Map.Entry<K,V>`
  `lowerEntry(K key)`
  Answers an entry related with the biggest key less than the specified key, or null if no such key.
  `K`
  `lowerKey(K key)`
  Answers the biggest key less than the specified key, or null if no such key.
  `NavigableSet<K>`
  `navigableKeySet()`
  Answers a NavigableSet view of the keys in ascending order.
  `Map.Entry<K,V>`
  `pollFirstEntry()`
  Deletes and answers the entry with the smallest key, or null if the map is empty.
  `Map.Entry<K,V>`
  `pollLastEntry()`
  Deletes and answers the entry with the biggest key, or null if the map is empty.
  `V`
  `put(K key, V value)`
  Maps the specified key to the specified value.
  `void`
  `putAll(Map<? extends K, ? extends V> map)`
  Copies all the mappings in the given map to this map.
  `V`
  `remove(java.lang.Object key)`
  Removes the mapping with the specified key from this map.
  `int`
  `size()`
  Returns the number of mappings in this map.
  `NavigableMap<K,V>`
  `subMap(K start, boolean startInclusive, K end, boolean endInclusive)`
  Answers a view of part of the map whose keys is from startKey to endKey.
  `SortedMap<K,V>`
  `subMap(K startKey, K endKey)`
  Returns a sorted map over a range of this sorted map with all keys greater than or equal to the specified `startKey` and less than the specified `endKey`.
  `SortedMap<K,V>`
  `tailMap(K startKey)`
  Returns a sorted map over a range of this sorted map with all keys that are greater than or equal to the specified `startKey`.
  `NavigableMap<K,V>`
  `tailMap(K start, boolean inclusive)`
  Answers a view of the tail of the map whose keys are bigger than (or equal to, depends on inclusive argument) startKey.
  `Collection<V>`
  `values()`
  Returns a collection of the values contained in this map.

  ### Methods inherited from class AbstractMap

  `equals, hashCode, isEmpty, toString`

  ### Methods inherited from class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface Map

  `compute, computeIfAbsent, computeIfPresent, equals, forEach, getOrDefault, hashCode, isEmpty, merge, putIfAbsent, remove, replace, replace, replaceAll`

- ## Constructor Details

  - ### TreeMap

    public TreeMap()
    Constructs a new empty `TreeMap` instance.

  - ### TreeMap

    public TreeMap(Comparator<? super K> comparator)

    Constructs a new empty `TreeMap` instance with the specified comparator.

    ###### Parameters

    - `comparator`: the comparator to compare keys with.

  - ### TreeMap

    public TreeMap(Map<? extends K, ? extends V> map)

    Constructs a new `TreeMap` instance containing the mappings from the specified map and using natural ordering.

    ###### Parameters

    - `map`: the mappings to add.

    ###### Throws

    - `ClassCastException`: @throws ClassCastException if a key in the specified map does not implement the Comparable interface, or if the keys in the map cannot be compared.

  - ### TreeMap

    public TreeMap(SortedMap<K, ? extends V> map)

    Constructs a new `TreeMap` instance containing the mappings from the specified SortedMap and using the same comparator.

    ###### Parameters

    - `map`: the mappings to add.

- ## Method Details

  - ### clear

    public void clear()

    Removes all mappings from this TreeMap, leaving it empty.

    ###### See also

    - Map#isEmpty()

    - #size()

    Specified by:
      `clear` in interface `Map<K,V>`
    Overrides:
      `clear` in class `AbstractMap<K,V>`

  - ### comparator

    public Comparator<? super K> comparator()

    Returns the comparator used to compare elements in this map.

    ###### Returns

    the comparator or `null` if the natural ordering is used.

    Specified by:
      `comparator` in interface `SortedMap<K,V>`

  - ### containsKey

    public boolean containsKey(java.lang.Object key)

    Returns whether this map contains the specified key.

    ###### Parameters

    - `key`: the key to search for.

    ###### Returns

    Specified by:
      `containsKey` in interface `Map<K,V>`
    Overrides:
      `containsKey` in class `AbstractMap<K,V>`
    Returns:

      `true` if this map contains the specified key, `false` otherwise.

      ###### Throws

      - `ClassCastException`: @throws ClassCastException if the specified key cannot be compared with the keys in this map.

      - `NullPointerException`: @throws NullPointerException if the specified key is `null` and the comparator cannot handle `null` keys.

  - ### containsValue

    public boolean containsValue(java.lang.Object value)

    Returns whether this map contains the specified value.

    ###### Parameters

    - `value`: the value to search for.

    ###### Returns

    Specified by:
      `containsValue` in interface `Map<K,V>`
    Overrides:
      `containsValue` in class `AbstractMap<K,V>`
    Returns:
      `true` if this map contains the specified value, `false` otherwise.

  - ### firstKey

    public K firstKey()

    Returns the first key in this map.

    ###### Returns

    the first key in this map.

    ###### Throws

    - `NoSuchElementException`: if this map is empty.
    Specified by:
      `firstKey` in interface `SortedMap<K,V>`

  - ### get

    public V get(java.lang.Object key)

    Returns the value of the mapping with the specified key.

    ###### Parameters

    - `key`: the key.

    ###### Returns

    the value of the mapping with the specified key.

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in this map.

    - `NullPointerException`: @throws NullPointerException if the key is `null` and the comparator cannot handle `null`.

    Specified by:
      `get` in interface `Map<K,V>`
    Overrides:
      `get` in class `AbstractMap<K,V>`
    Returns:
      the value of the mapping with the specified key, or `null` if no mapping for the specified key is found.

  - ### keySet

    public Set<K> keySet()

    Returns a set of the keys contained in this map. The set is backed by this map so changes to one are reflected by the other. The set does not support adding.

    ###### Returns

    a set of the keys.

    Specified by:
      `keySet` in interface `Map<K,V>`
    Overrides:
      `keySet` in class `AbstractMap<K,V>`

  - ### lastKey

    public K lastKey()

    Returns the last key in this map.

    ###### Returns

    the last key in this map.

    ###### Throws

    - `NoSuchElementException`: if this map is empty.
    Specified by:
      `lastKey` in interface `SortedMap<K,V>`

  - ### put

    public V put(K key, V value)

    Maps the specified key to the specified value.

    ###### Parameters

    - `key`: the key.

    - `value`: the value.

    ###### Returns

    Specified by:
      `put` in interface `Map<K,V>`
    Overrides:
      `put` in class `AbstractMap<K,V>`
    Returns:

      the value of any previous mapping with the specified key or `null` if there was no mapping.

      ###### Throws

      - `ClassCastException`: @throws ClassCastException if the specified key cannot be compared with the keys in this map.

      - `NullPointerException`: @throws NullPointerException if the specified key is `null` and the comparator cannot handle `null` keys.

  - ### putAll

    public void putAll(Map<? extends K, ? extends V> map)

    Copies all the mappings in the given map to this map. These mappings will replace all mappings that this map had for any of the keys currently in the given map.

    ###### Parameters

    - `map`: the map to copy mappings from.

    ###### Throws

    - `ClassCastException`: @throws ClassCastException if a key in the specified map cannot be compared with the keys in this map.

    - `NullPointerException`: @throws NullPointerException if a key in the specified map is `null` and the comparator cannot handle `null` keys.

    Specified by:
      `putAll` in interface `Map<K,V>`
    Overrides:
      `putAll` in class `AbstractMap<K,V>`

  - ### remove

    public V remove(java.lang.Object key)

    Removes the mapping with the specified key from this map.

    ###### Parameters

    - `key`: the key of the mapping to remove.

    ###### Returns

    Specified by:
      `remove` in interface `Map<K,V>`
    Overrides:
      `remove` in class `AbstractMap<K,V>`
    Returns:

      the value of the removed mapping or `null` if no mapping for the specified key was found.

      ###### Throws

      - `ClassCastException`: @throws ClassCastException if the specified key cannot be compared with the keys in this map.

      - `NullPointerException`: @throws NullPointerException if the specified key is `null` and the comparator cannot handle `null` keys.

  - ### size

    public int size()

    Returns the number of mappings in this map.

    ###### Returns

    the number of mappings in this map.

    Specified by:
      `size` in interface `Map<K,V>`
    Overrides:
      `size` in class `AbstractMap<K,V>`

  - ### values

    public Collection<V> values()

    Returns a collection of the values contained in this map. The collection is backed by this map so changes to one are reflected by the other. The collection supports remove, removeAll, retainAll and clear operations, and it does not support add or addAll operations.

    This method returns a collection which is the subclass of AbstractCollection. The iterator method of this subclass returns a "wrapper object" over the iterator of map's entrySet(). The `size` method wraps the map's size method and the `contains` method wraps the map's containsValue method.

    The collection is created when this method is called for the first time and returned in response to all subsequent calls. This method may return different collections when multiple concurrent calls occur, since no synchronization is performed.

    ###### Returns

    a collection of the values contained in this map.

    Specified by:
      `values` in interface `Map<K,V>`
    Overrides:
      `values` in class `AbstractMap<K,V>`

  - ### firstEntry

    public Map.Entry<K,V> firstEntry()

    Answers the entry with the smallest key, or null if the map is empty.

    ###### Returns

    the entry with the smallest key, or null if the map is empty

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#firstEntry()
    Specified by:
      `firstEntry` in interface `NavigableMap<K,V>`

  - ### lastEntry

    public Map.Entry<K,V> lastEntry()

    Answers the entry with the biggest key, or null if the map is empty.

    ###### Returns

    the entry with the biggest key, or null if the map is empty

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#lastEntry()
    Specified by:
      `lastEntry` in interface `NavigableMap<K,V>`

  - ### pollFirstEntry

    public Map.Entry<K,V> pollFirstEntry()

    Deletes and answers the entry with the smallest key, or null if the map is empty.

    ###### Returns

    the entry with the smallest key, or null if the map is empty

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#pollFirstEntry()
    Specified by:
      `pollFirstEntry` in interface `NavigableMap<K,V>`

  - ### pollLastEntry

    public Map.Entry<K,V> pollLastEntry()

    Deletes and answers the entry with the biggest key, or null if the map is empty.

    ###### Returns

    the entry with the biggest key, or null if the map is empty

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#pollLastEntry()
    Specified by:
      `pollLastEntry` in interface `NavigableMap<K,V>`

  - ### higherEntry

    public Map.Entry<K,V> higherEntry(K key)

    Answers an entry related with the smallest key greater than the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    the entry, or null if no such key

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in the map

    - `NullPointerException`: if the key is null and the map can not contain null key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#higherEntry(Object)
    Specified by:
      `higherEntry` in interface `NavigableMap<K,V>`

  - ### higherKey

    public K higherKey(K key)

    Answers the smallest key greater than the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    the smallest key greater than key, or null if no such key

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in the map

    - `NullPointerException`: if the key is null and the map can not contain null key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#higherKey(Object)
    Specified by:
      `higherKey` in interface `NavigableMap<K,V>`

  - ### lowerEntry

    public Map.Entry<K,V> lowerEntry(K key)

    Answers an entry related with the biggest key less than the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    the entry, or null if no such key

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in the map

    - `NullPointerException`: if the key is null and the map can not contain null key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#lowerEntry(Object)
    Specified by:
      `lowerEntry` in interface `NavigableMap<K,V>`

  - ### lowerKey

    public K lowerKey(K key)

    Answers the biggest key less than the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    the biggest key less than key, or null if no such key

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in the map

    - `NullPointerException`: if the key is null and the map can not contain null key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#lowerKey(Object)
    Specified by:
      `lowerKey` in interface `NavigableMap<K,V>`

  - ### ceilingEntry

    public Map.Entry<K,V> ceilingEntry(K key)

    Answers an entry related with the smallest key greater than or equal to the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    the entry, or null if no such key

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in the map

    - `NullPointerException`: if the key is null and the map can not contain null key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#ceilingEntry(java.lang.Object)
    Specified by:
      `ceilingEntry` in interface `NavigableMap<K,V>`

  - ### ceilingKey

    public K ceilingKey(K key)

    Answers the smallest key greater than or equal to the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#ceilingKey(java.lang.Object)
    Specified by:
      `ceilingKey` in interface `NavigableMap<K,V>`
    Returns:

      the smallest key greater than or equal to key, or null if no such key

      ###### Throws

      - `ClassCastException`: if the key cannot be compared with the keys in the map

      - `NullPointerException`: if the key is null and the map can not contain null key

  - ### floorEntry

    public Map.Entry<K,V> floorEntry(K key)

    Answers an entry related with the biggest key less than or equal to the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    the entry, or null if no such key

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in the map

    - `NullPointerException`: if the key is null and the map can not contain null key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#floorEntry(Object)
    Specified by:
      `floorEntry` in interface `NavigableMap<K,V>`

  - ### floorKey

    public K floorKey(K key)

    Answers the biggest key less than or equal to the specified key, or null if no such key.

    ###### Parameters

    - `key`: the key

    ###### Returns

    the biggest key less than or equal to key, or null if no such key

    ###### Throws

    - `ClassCastException`: if the key cannot be compared with the keys in the map

    - `NullPointerException`: if the key is null and the map can not contain null key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#floorKey(Object)
    Specified by:
      `floorKey` in interface `NavigableMap<K,V>`

  - ### entrySet

    public Set<Map.Entry<K,V>> entrySet()

    Returns a set containing all of the mappings in this map. Each mapping is an instance of `Map.Entry`. As the set is backed by this map, changes in one will be reflected in the other. It does not support adding operations.

    ###### Returns

    a set of the mappings.

    Specified by:
      `entrySet` in interface `Map<K,V>`
    Specified by:
      `entrySet` in class `AbstractMap<K,V>`

  - ### navigableKeySet

    public NavigableSet<K> navigableKeySet()

    Answers a NavigableSet view of the keys in ascending order.

    ###### Returns

    the navigable set view

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#navigableKeySet()
    Specified by:
      `navigableKeySet` in interface `NavigableMap<K,V>`

  - ### descendingKeySet

    public NavigableSet<K> descendingKeySet()

    Answers a NavigableSet view of the keys in descending order.

    ###### Returns

    the navigable set view

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#descendingKeySet()
    Specified by:
      `descendingKeySet` in interface `NavigableMap<K,V>`

  - ### descendingMap

    public NavigableMap<K,V> descendingMap()

    Answers a reverse order view of the map.

    ###### Returns

    the reverse order view of the map

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#descendingMap()
    Specified by:
      `descendingMap` in interface `NavigableMap<K,V>`

  - ### subMap

    public NavigableMap<K,V> subMap(K start, boolean startInclusive, K end, boolean endInclusive)

    Answers a view of part of the map whose keys is from startKey to endKey.

    ###### Parameters

    - `startKey`: the start key

    - `startInclusive`: true if the start key is in the returned map

    - `endKey`: the end key

    - `endInclusive`: true if the end key is in the returned map

    ###### Returns

    the sub-map view

    ###### Throws

    - `ClassCastException`: @exception ClassCastException when the class of the start or end key is inappropriate for this SubMap

    - `NullPointerException`: @exception NullPointerException when the start or end key is null and this SortedMap does not support null keys

    - `IllegalArgumentException`: when the start key is greater than the end key

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#subMap(Object, boolean, Object, boolean)
    Specified by:
      `subMap` in interface `NavigableMap<K,V>`

  - ### headMap

    public NavigableMap<K,V> headMap(K end, boolean inclusive)

    Answers a view of the head of the map whose keys are smaller than (or equal to, depends on inclusive argument) endKey.

    ###### Parameters

    - `endKey`: the end key

    - `inclusive`: true if the end key is in the returned map

    ###### Returns

    the head-map view

    ###### Throws

    - `ClassCastException`: @exception ClassCastException when the class of the end key is inappropriate for this SubMap

    - `NullPointerException`: @exception NullPointerException when the end key is null and this SortedMap does not support null keys

    - `IllegalArgumentException`: @exception IllegalArgumentException when the map is range-limited and end key is out of the range of the map

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#headMap(Object, boolean)
    Specified by:
      `headMap` in interface `NavigableMap<K,V>`

  - ### tailMap

    public NavigableMap<K,V> tailMap(K start, boolean inclusive)

    Answers a view of the tail of the map whose keys are bigger than (or equal to, depends on inclusive argument) startKey.

    ###### Parameters

    - `startKey`: the start key

    - `inclusive`: true if the start key is in the returned map

    ###### Returns

    the tail-map view

    ###### Throws

    - `ClassCastException`: @exception ClassCastException when the class of the start key is inappropriate for this SubMap

    - `NullPointerException`: @exception NullPointerException when the start key is null and this SortedMap does not support null keys

    - `IllegalArgumentException`: @exception IllegalArgumentException when the map is range-limited and start key is out of the range of the map

    ###### Since

    1.6

    ###### See also

    - java.util.NavigableMap#tailMap(Object, boolean)
    Specified by:
      `tailMap` in interface `NavigableMap<K,V>`

  - ### subMap

    public SortedMap<K,V> subMap(K startKey, K endKey)

    Returns a sorted map over a range of this sorted map with all keys greater than or equal to the specified `startKey` and less than the specified `endKey`. Changes to the returned sorted map are reflected in this sorted map and vice versa.

    Note: The returned map will not allow an insertion of a key outside the specified range.

    ###### Parameters

    - `startKey`: the low boundary of the range (inclusive).

    - `endKey`: the high boundary of the range (exclusive),

    ###### Returns

    a sorted map with the key from the specified range.

    ###### Throws

    - `ClassCastException`: @throws ClassCastException if the start or end key cannot be compared with the keys in this map.

    - `NullPointerException`: @throws NullPointerException if the start or end key is `null` and the comparator cannot handle `null` keys.

    - `IllegalArgumentException`: @throws IllegalArgumentException if the start key is greater than the end key, or if this map is itself a sorted map over a range of another sorted map and the specified range is outside of its range.

    Specified by:
      `subMap` in interface `SortedMap<K,V>`

  - ### headMap

    public SortedMap<K,V> headMap(K endKey)

    Returns a sorted map over a range of this sorted map with all keys that are less than the specified `endKey`. Changes to the returned sorted map are reflected in this sorted map and vice versa.

    Note: The returned map will not allow an insertion of a key outside the specified range.

    ###### Parameters

    - `endKey`: the high boundary of the range specified.

    ###### Returns

    a sorted map where the keys are less than `endKey`.

    ###### Throws

    - `ClassCastException`: @throws ClassCastException if the specified key cannot be compared with the keys in this map.

    - `NullPointerException`: @throws NullPointerException if the specified key is `null` and the comparator cannot handle `null` keys.

    - `IllegalArgumentException`: @throws IllegalArgumentException if this map is itself a sorted map over a range of another map and the specified key is outside of its range.

    Specified by:
      `headMap` in interface `SortedMap<K,V>`

  - ### tailMap

    public SortedMap<K,V> tailMap(K startKey)

    Returns a sorted map over a range of this sorted map with all keys that are greater than or equal to the specified `startKey`. Changes to the returned sorted map are reflected in this sorted map and vice versa.

    Note: The returned map will not allow an insertion of a key outside the specified range.

    ###### Parameters

    - `startKey`: the low boundary of the range specified.

    ###### Returns

    Specified by:
      `tailMap` in interface `SortedMap<K,V>`
    Returns:

      a sorted map where the keys are greater or equal to `startKey`.

      ###### Throws

      - `ClassCastException`: @throws ClassCastException if the specified key cannot be compared with the keys in this map.

      - `NullPointerException`: @throws NullPointerException if the specified key is `null` and the comparator cannot handle `null` keys.

      - `IllegalArgumentException`: @throws IllegalArgumentException if this map itself a sorted map over a range of another map and the specified key is outside of its range.