NavigableMap 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 implementation provides guaranteed log(n) time cost for the containsKey, get, put and remove operations. Algorithms are adaptations of those in Cormen, Leiserson, and Rivest's Introduction to Algorithms.
Note that the ordering maintained by a sorted map (whether or not an explicit comparator is provided) must be consistent with equals if this sorted map is to correctly implement the Map interface. (See Comparable or Comparator for a precise definition of consistent with equals.) This is so because the Map interface is defined in terms of the equals operation, but a map performs all key comparisons using its compareTo (or compare) method, so two keys that are deemed equal by this method are, from the standpoint of the sorted map, equal. The behavior of a sorted map is well-defined even if its ordering is inconsistent with equals; it just fails to obey the general contract of the Map interface.
Note that this implementation is not synchronized.
If multiple threads access a map concurrently, and at least one of the
threads modifies the map structurally, it must be synchronized
externally. (A structural modification is any operation that adds or
deletes one or more mappings; merely changing the value associated
with an existing key is not a structural modification.) This is
typically accomplished by synchronizing on some object that naturally
encapsulates the map.
If no such object exists, the map should be "wrapped" using the
Collections.synchronizedSortedMap
method. This is best done at creation time, to prevent accidental
unsynchronized access to the map:
SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));
The iterators returned by the iterator method of the collections
returned by all of this class's "collection view methods" are
fail-fast: if the map is structurally modified at any time after the
iterator is created, in any way except through the iterator's own
remove method, the iterator will throw a . Thus, in the face of concurrent
modification, the iterator fails quickly and cleanly, rather than risking
arbitrary, non-deterministic behavior at an undetermined time in the future.
ConcurrentModificationException
Note that the fail-fast behavior of an iterator cannot be guaranteed as it is, generally speaking, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification. Fail-fast iterators throw ConcurrentModificationException on a best-effort basis. Therefore, it would be wrong to write a program that depended on this exception for its correctness: the fail-fast behavior of iterators should be used only to detect bugs.
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.)
This class is a member of the Java Collections Framework.
<K> the type of keys maintained by this map<V> the type of mapped valuesMapHashMapHashtablejava.lang.ComparableComparatorCollectionjava.lang.Comparable interface. Furthermore, all such keys must be
mutually comparable: k1.compareTo(k2) must not throw
a ClassCastException for any keys k1 and
k2 in the map. If the user attempts to put a key into the
map that violates this constraint (for example, the user attempts to
put a string key into a map whose keys are integers), the
put(Object key, Object value) call will throw a
ClassCastException.
comparator the comparator that will be used to order this map.
If null, the natural
ordering of the keys will be used.java.lang.Comparable interface. Furthermore, all such keys must be
mutually comparable: k1.compareTo(k2) must not throw
a ClassCastException for any keys k1 and
k2 in the map. This method runs in n*log(n) time.
m the map whose mappings are to be placed in this mapjava.lang.ClassCastException if the keys in m are not java.lang.Comparable,
or are not mutually comparablejava.lang.NullPointerException if the specified map is nullm the sorted map whose mappings are to be placed in this map,
and whose comparator is to be used to sort this mapjava.lang.NullPointerException if the specified map is nullkey key whose presence in this map is to be testedjava.lang.ClassCastException if the specified key cannot be compared
with the keys currently in the mapjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysvalue value whose presence in this map is to be testednull 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.)
A return value of null does not necessarily
indicate that the map contains no mapping for the key; it's also
possible that the map explicitly maps the key to null.
The containsKey operation may be used to
distinguish these two cases.
java.lang.ClassCastException if the specified key cannot be compared
with the keys currently in the mapjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysmap mappings to be stored in this mapjava.lang.ClassCastException if the class of a key or value in
the specified map prevents it from being stored in this mapjava.lang.NullPointerException if the specified map is null or
the specified map contains a null key and this map does not
permit null keysjava.lang.ClassCastException if the specified key cannot be compared
with the keys currently in the mapjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keyskey key with which the specified value is to be associatedvalue value to be associated with the specified keyjava.lang.ClassCastException if the specified key cannot be compared
with the keys currently in the mapjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keyskey key for which mapping should be removedjava.lang.ClassCastException if the specified key cannot be compared
with the keys currently in the mapjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.ClassCastExceptionjava.lang.NullPointerException if the specified key is null
and this map uses natural ordering, or its comparator
does not permit null keysSet 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. If the map is modified
while an iteration over the set is in progress (except through
the iterator's own remove operation), the results of
the iteration are undefined. 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.
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. If the map is
modified while an iteration over the collection is in progress
(except through the iterator's own remove operation),
the results of the iteration are undefined. 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.
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. If the map is modified
while an iteration over the set is in progress (except through
the iterator's own remove operation, or through the
setValue operation on a map entry returned by the
iterator) the results of the iteration are undefined. 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.
java.lang.ClassCastExceptionjava.lang.NullPointerException if fromKey or toKey is
null and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.IllegalArgumentExceptionjava.lang.ClassCastExceptionjava.lang.NullPointerException if toKey is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.IllegalArgumentExceptionjava.lang.ClassCastExceptionjava.lang.NullPointerException if fromKey is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.IllegalArgumentExceptionjava.lang.ClassCastExceptionjava.lang.NullPointerException if fromKey or toKey is
null and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.IllegalArgumentExceptionjava.lang.ClassCastExceptionjava.lang.NullPointerException if toKey is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.IllegalArgumentExceptionjava.lang.ClassCastExceptionjava.lang.NullPointerException if fromKey is null
and this map uses natural ordering, or its comparator
does not permit null keysjava.lang.IllegalArgumentExceptionNoSuchElementException if the Entry is nullsize the number of keys (or key-value pairs) to be read from
the iterator or streamit If non-null, new entries are created from entries
or keys read from this iterator.str If non-null, new entries are created from keys and
possibly values read from this stream in serialized form.
Exactly one of it and str should be non-null.defaultVal if non-null, this default value is used for
each value in the map. If null, each value is read from
iterator or stream, as described above.IOException propagated from stream reads. This cannot
occur if str is null.java.lang.ClassNotFoundException propagated from readObject.
This cannot occur if str is null.level the current level of tree. Initial call should be 0.lo the first element index of this subtree. Initial should be 0.hi the last element index of this subtree. Initial should be
size-1.redLevel the level at which nodes should be red.
Must be equal to computeRedLevel for tree of this size.