/*
* Written by Doug Lea with assistance from members of JCP JSR-166
* Expert Group and released to the public domain, as explained at
* http://creativecommons.org/licenses/publicdomain
*/
package java.util;
/**
* A {@link SortedMap} extended with navigation methods returning the
* closest matches for given search targets. Methods
* lowerEntry, floorEntry, ceilingEntry,
* and higherEntry return Map.Entry objects
* associated with keys respectively less than, less than or equal,
* greater than or equal, and greater than a given key, returning
* null if there is no such key. Similarly, methods
* lowerKey, floorKey, ceilingKey, and
* higherKey return only the associated keys. All of these
* methods are designed for locating, not traversing entries.
*
*
A NavigableMap may be viewed and traversed in either
* ascending or descending key order. The Map methods
* keySet and entrySet return ascending views, and
* the additional methods descendingKeySet and
* descendingEntrySet return descending views. The
* performance of ascending traversals is likely to be faster than
* descending traversals. Notice that it is possible to perform
* subrange traversals in either direction using navigableSubMap.
* Methods navigableSubMap, navigableHeadMap, and
* navigableTailMap differ from the similarly named
* SortedMap methods only in their declared return types.
* Submaps of any NavigableMap must implement the
* NavigableMap interface.
*
*
This interface additionally defines methods firstEntry,
* pollFirstEntry, lastEntry, and
* pollLastEntry that return and/or remove the least and
* greatest mappings, if any exist, else returning null.
*
*
Implementations of entry-returning methods are expected to
* return Map.Entry pairs representing snapshots of mappings
* at the time they were produced, and thus generally do not
* support the optional Entry.setValue method. Note however
* that it is possible to change mappings in the associated map using
* method put.
*
*
This interface is a member of the
*
* Java Collections Framework.
*
* @author Doug Lea
* @param the type of keys maintained by this map
* @param the type of mapped values
* @since 1.6
*/
public interface NavigableMap extends SortedMap {
/**
* Returns a key-value mapping associated with the greatest key
* strictly less than the given key, or null if there is
* no such key.
*
* @param key the key
* @return an entry with the greatest key less than key,
* or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
Map.Entry lowerEntry(K key);
/**
* Returns the greatest key strictly less than the given key, or
* null if there is no such key.
*
* @param key the key
* @return the greatest key less than key,
* or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
K lowerKey(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.
*
* @param key the key
* @return an entry with the greatest key less than or equal to
* key, or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
Map.Entry floorEntry(K key);
/**
* Returns the greatest key less than or equal to the given key,
* or null if there is no such key.
*
* @param key the key
* @return the greatest key less than or equal to key,
* or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
K floorKey(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 key.
*
* @param key the key
* @return an entry with the least key greater than or equal to
* key, or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
Map.Entry ceilingEntry(K key);
/**
* Returns the least key greater than or equal to the given key,
* or null if there is no such key.
*
* @param key the key
* @return the least key greater than or equal to key,
* or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
K ceilingKey(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.
*
* @param key the key
* @return an entry with the least key greater than key,
* or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
Map.Entry higherEntry(K key);
/**
* Returns the least key strictly greater than the given key, or
* null if there is no such key.
*
* @param key the key
* @return the least key greater than key,
* or null if there is no such key
* @throws ClassCastException if the specified key cannot be compared
* with the keys currently in the map
* @throws NullPointerException if the specified key is null
* and this map does not permit null keys
*/
K higherKey(K key);
/**
* Returns a key-value mapping associated with the least
* key in this map, or null if the map is empty.
*
* @return an entry with the least key,
* or null if this map is empty
*/
Map.Entry firstEntry();
/**
* Returns a key-value mapping associated with the greatest
* key in this map, or null if the map is empty.
*
* @return an entry with the greatest key,
* or null if this map is empty
*/
Map.Entry lastEntry();
/**
* Removes and returns a key-value mapping associated with
* the least key in this map, or null if the map is empty.
*
* @return the removed first entry of this map,
* or null if this map is empty
*/
Map.Entry pollFirstEntry();
/**
* Removes and returns a key-value mapping associated with
* the greatest key in this map, or null if the map is empty.
*
* @return the removed last entry of this map,
* or null if this map is empty
*/
Map.Entry pollLastEntry();
/**
* Returns a {@link Set} 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. 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.
*
* @return a set view of the keys contained in this map, sorted in
* descending order
*/
Set descendingKeySet();
/**
* Returns a {@link Set} view of the mappings contained in this map.
* The set's iterator returns the entries in descending 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.
*
* @return a set view of the mappings contained in this map,
* sorted in descending key order
*/
Set> descendingEntrySet();
/**
* Returns a view of the portion of this map whose keys range from
* fromKey, inclusive, to toKey, exclusive. (If
* fromKey and toKey are equal, the returned map
* is empty.) 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.
*
* @param fromKey low endpoint (inclusive) of the keys in the returned map
* @param toKey high endpoint (exclusive) of the keys in the returned map
* @return a view of the portion of this map whose keys range from
* fromKey, inclusive, to toKey, exclusive
* @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.
* @throws NullPointerException if fromKey or toKey
* is null and this map does not permit null keys
* @throws 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
*/
NavigableMap navigableSubMap(K fromKey, K toKey);
/**
* Returns a view of the portion of this map whose keys are
* strictly less than 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.
*
* @param toKey high endpoint (exclusive) of the keys in the returned map
* @return a view of the portion of this map whose keys are strictly
* less than 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 {@link Comparable}).
* Implementations may, but are not required to, throw this
* exception if toKey cannot be compared to keys
* currently in the map.
* @throws NullPointerException if toKey is null
* and this map does not permit null keys
* @throws IllegalArgumentException if this map itself has a
* restricted range, and toKey lies outside the
* bounds of the range
*/
NavigableMap navigableHeadMap(K toKey);
/**
* Returns a view of the portion of this map whose keys are
* greater than or equal to 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.
*
* @param fromKey low endpoint (inclusive) of the keys in the returned map
* @return a view of the portion of this map whose keys are greater
* than or equal to 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 {@link Comparable}).
* Implementations may, but are not required to, throw this
* exception if fromKey cannot be compared to keys
* currently in the map.
* @throws NullPointerException if fromKey is null
* and this map does not permit null keys
* @throws IllegalArgumentException if this map itself has a
* restricted range, and fromKey lies outside the
* bounds of the range
*/
NavigableMap navigableTailMap(K fromKey);
}