ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/NavigableMap.java
Revision: 1.8
Committed: Mon May 16 06:27:52 2005 UTC (18 years, 11 months ago) by jsr166
Branch: MAIN
Changes since 1.7: +173 -146 lines
Log Message:
doc fixes

File Contents

# User Rev Content
1 dl 1.1 /*
2     * Written by Doug Lea with assistance from members of JCP JSR-166
3     * Expert Group and released to the public domain, as explained at
4     * http://creativecommons.org/licenses/publicdomain
5     */
6    
7     package java.util;
8    
9     /**
10     * A {@link SortedMap} extended with navigation methods returning the
11     * closest matches for given search targets. Methods
12     * <tt>lowerEntry</tt>, <tt>floorEntry</tt>, <tt>ceilingEntry</tt>,
13     * and <tt>higherEntry</tt> return <tt>Map.Entry</tt> objects
14     * associated with keys respectively less than, less than or equal,
15     * greater than or equal, and greater than a given key, returning
16     * <tt>null</tt> if there is no such key. Similarly, methods
17     * <tt>lowerKey</tt>, <tt>floorKey</tt>, <tt>ceilingKey</tt>, and
18     * <tt>higherKey</tt> return only the associated keys. All of these
19     * methods are designed for locating, not traversing entries.
20     *
21     * <p>A <tt>NavigableMap</tt> may be viewed and traversed in either
22     * ascending or descending key order. The <tt>Map</tt> methods
23     * <tt>keySet</tt> and <tt>entrySet</tt> return ascending views, and
24     * the additional methods <tt>descendingKeySet</tt> and
25     * <tt>descendingEntrySet</tt> return descending views. The
26     * performance of ascending traversals is likely to be faster than
27     * descending traversals. Notice that it is possible to perform
28 dl 1.4 * subrange traversals in either direction using <tt>navigableSubMap</tt>.
29     * Methods <tt>navigableSubMap</tt>, <tt>navigableHeadMap</tt>, and
30     * <tt>navigableTailMap</tt> differ from the similarly named
31     * <tt>SortedMap</tt> methods only in that the returned maps
32     * are guaranteed to obey the <tt>NavigableMap</tt> interface.
33 jsr166 1.5 *
34 dl 1.1 * <p>This interface additionally defines methods <tt>firstEntry</tt>,
35     * <tt>pollFirstEntry</tt>, <tt>lastEntry</tt>, and
36     * <tt>pollLastEntry</tt> that return and/or remove the least and
37     * greatest mappings, if any exist, else returning <tt>null</tt>.
38     *
39     * <p> Implementations of entry-returning methods are expected to
40     * return <tt>Map.Entry</tt> pairs representing snapshots of mappings
41     * at the time they were produced, and thus generally do <em>not</em>
42     * support the optional <tt>Entry.setValue</tt> method. Note however
43     * that it is possible to change mappings in the associated map using
44     * method <tt>put</tt>.
45     *
46 jsr166 1.7 * <p>This interface is a member of the
47     * <a href="{@docRoot}/../guide/collections/index.html">
48     * Java Collections Framework</a>.
49     *
50 dl 1.1 * @author Doug Lea
51     * @param <K> the type of keys maintained by this map
52 jsr166 1.5 * @param <V> the type of mapped values
53 jsr166 1.6 * @since 1.6
54 dl 1.1 */
55     public interface NavigableMap<K,V> extends SortedMap<K,V> {
56     /**
57 jsr166 1.8 * Returns a key-value mapping associated with the greatest key
58     * strictly less than the given key, or <tt>null</tt> if there is
59     * no such key.
60 jsr166 1.5 *
61 jsr166 1.8 * @param key the key
62     * @return an entry with the greatest key less than <tt>key</tt>,
63     * or <tt>null</tt> if there is no such key
64     * @throws ClassCastException if the specified key cannot be compared
65     * with the keys currently in the map
66     * @throws NullPointerException if the specified key is null
67     * and this map does not permit null keys
68 dl 1.1 */
69 jsr166 1.8 Map.Entry<K,V> lowerEntry(K key);
70 dl 1.1
71     /**
72 jsr166 1.8 * Returns the greatest key strictly less than the given key, or
73 dl 1.1 * <tt>null</tt> if there is no such key.
74 jsr166 1.5 *
75 jsr166 1.8 * @param key the key
76     * @return the greatest key less than <tt>key</tt>,
77     * or <tt>null</tt> if there is no such key
78     * @throws ClassCastException if the specified key cannot be compared
79     * with the keys currently in the map
80     * @throws NullPointerException if the specified key is null
81     * and this map does not permit null keys
82 dl 1.1 */
83 jsr166 1.8 K lowerKey(K key);
84 dl 1.1
85     /**
86 jsr166 1.8 * Returns a key-value mapping associated with the greatest key
87     * less than or equal to the given key, or <tt>null</tt> if there
88     * is no such key.
89 jsr166 1.5 *
90 jsr166 1.8 * @param key the key
91     * @return an entry with the greatest key less than or equal to
92     * <tt>key</tt>, or <tt>null</tt> if there is no such key
93     * @throws ClassCastException if the specified key cannot be compared
94     * with the keys currently in the map
95     * @throws NullPointerException if the specified key is null
96     * and this map does not permit null keys
97 dl 1.1 */
98 jsr166 1.8 Map.Entry<K,V> floorEntry(K key);
99 dl 1.1
100     /**
101 jsr166 1.8 * Returns the greatest key less than or equal to the given key,
102     * or <tt>null</tt> if there is no such key.
103 jsr166 1.5 *
104 jsr166 1.8 * @param key the key
105     * @return the greatest key less than or equal to <tt>key</tt>,
106     * or <tt>null</tt> if there is no such key
107     * @throws ClassCastException if the specified key cannot be compared
108     * with the keys currently in the map
109     * @throws NullPointerException if the specified key is null
110     * and this map does not permit null keys
111 dl 1.1 */
112 jsr166 1.8 K floorKey(K key);
113 dl 1.1
114     /**
115 jsr166 1.8 * Returns a key-value mapping associated with the least key
116     * greater than or equal to the given key, or <tt>null</tt> if
117     * there is no such key.
118 jsr166 1.5 *
119 jsr166 1.8 * @param key the key
120     * @return an entry with the least key greater than or equal to
121     * <tt>key</tt>, or <tt>null</tt> if there is no such key
122     * @throws ClassCastException if the specified key cannot be compared
123     * with the keys currently in the map
124     * @throws NullPointerException if the specified key is null
125     * and this map does not permit null keys
126 dl 1.1 */
127 jsr166 1.8 Map.Entry<K,V> ceilingEntry(K key);
128 dl 1.1
129     /**
130 jsr166 1.8 * Returns the least key greater than or equal to the given key,
131     * or <tt>null</tt> if there is no such key.
132 jsr166 1.5 *
133 jsr166 1.8 * @param key the key
134     * @return the least key greater than or equal to <tt>key</tt>,
135     * or <tt>null</tt> if there is no such key
136     * @throws ClassCastException if the specified key cannot be compared
137     * with the keys currently in the map
138     * @throws NullPointerException if the specified key is null
139     * and this map does not permit null keys
140 dl 1.1 */
141 jsr166 1.8 K ceilingKey(K key);
142 dl 1.1
143     /**
144     * Returns a key-value mapping associated with the least key
145     * strictly greater than the given key, or <tt>null</tt> if there
146 jsr166 1.8 * is no such key.
147 jsr166 1.5 *
148 jsr166 1.8 * @param key the key
149     * @return an entry with the least key greater than <tt>key</tt>,
150     * or <tt>null</tt> if there is no such key
151     * @throws ClassCastException if the specified key cannot be compared
152     * with the keys currently in the map
153     * @throws NullPointerException if the specified key is null
154     * and this map does not permit null keys
155 dl 1.1 */
156 dl 1.3 Map.Entry<K,V> higherEntry(K key);
157 dl 1.1
158     /**
159     * Returns the least key strictly greater than the given key, or
160     * <tt>null</tt> if there is no such key.
161 jsr166 1.5 *
162 jsr166 1.8 * @param key the key
163     * @return the least key greater than <tt>key</tt>,
164     * or <tt>null</tt> if there is no such key
165     * @throws ClassCastException if the specified key cannot be compared
166     * with the keys currently in the map
167     * @throws NullPointerException if the specified key is null
168     * and this map does not permit null keys
169 dl 1.1 */
170 dl 1.3 K higherKey(K key);
171 dl 1.1
172     /**
173     * Returns a key-value mapping associated with the least
174     * key in this map, or <tt>null</tt> if the map is empty.
175 jsr166 1.5 *
176 jsr166 1.8 * @return an entry with the least key,
177     * or <tt>null</tt> if this map is empty
178 dl 1.1 */
179 dl 1.3 Map.Entry<K,V> firstEntry();
180 dl 1.1
181     /**
182     * Returns a key-value mapping associated with the greatest
183     * key in this map, or <tt>null</tt> if the map is empty.
184 jsr166 1.5 *
185 jsr166 1.8 * @return an entry with the greatest key,
186     * or <tt>null</tt> if this map is empty
187 dl 1.1 */
188 dl 1.3 Map.Entry<K,V> lastEntry();
189 dl 1.1
190     /**
191     * Removes and returns a key-value mapping associated with
192     * the least key in this map, or <tt>null</tt> if the map is empty.
193 jsr166 1.5 *
194 jsr166 1.8 * @return the removed first entry of this map,
195     * or <tt>null</tt> if this map is empty
196 dl 1.1 */
197 dl 1.3 Map.Entry<K,V> pollFirstEntry();
198 dl 1.1
199     /**
200     * Removes and returns a key-value mapping associated with
201     * the greatest key in this map, or <tt>null</tt> if the map is empty.
202 jsr166 1.5 *
203 jsr166 1.8 * @return the removed last entry of this map,
204     * or <tt>null</tt> if this map is empty
205 dl 1.1 */
206 dl 1.3 Map.Entry<K,V> pollLastEntry();
207 dl 1.1
208     /**
209 jsr166 1.8 * Returns a {@link Set} view of the keys contained in this map.
210     * The set's iterator returns the keys in descending order.
211     * The set is backed by the map, so changes to the map are
212     * reflected in the set, and vice-versa. If the map is modified
213     * while an iteration over the set is in progress (except through
214     * the iterator's own <tt>remove</tt> operation), the results of
215     * the iteration are undefined. The set supports element removal,
216     * which removes the corresponding mapping from the map, via the
217     * <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
218 dl 1.1 * <tt>removeAll</tt> <tt>retainAll</tt>, and <tt>clear</tt>
219     * operations. It does not support the add or <tt>addAll</tt>
220     * operations.
221     *
222 jsr166 1.8 * @return a set view of the keys contained in this map, sorted in
223     * descending order
224 dl 1.1 */
225     Set<K> descendingKeySet();
226    
227     /**
228 jsr166 1.8 * Returns a {@link Set} view of the mappings contained in this map.
229     * The set's iterator returns the entries in descending key order.
230     * The set is backed by the map, so changes to the map are
231     * reflected in the set, and vice-versa. If the map is modified
232     * while an iteration over the set is in progress (except through
233     * the iterator's own <tt>remove</tt> operation, or through the
234     * <tt>setValue</tt> operation on a map entry returned by the
235     * iterator) the results of the iteration are undefined. The set
236     * supports element removal, which removes the corresponding
237     * mapping from the map, via the <tt>Iterator.remove</tt>,
238     * <tt>Set.remove</tt>, <tt>removeAll</tt>, <tt>retainAll</tt> and
239     * <tt>clear</tt> operations. It does not support the
240     * <tt>add</tt> or <tt>addAll</tt> operations.
241 dl 1.1 *
242 jsr166 1.8 * @return a set view of the mappings contained in this map,
243     * sorted in descending key order
244 dl 1.1 */
245     Set<Map.Entry<K, V>> descendingEntrySet();
246    
247     /**
248     * Returns a view of the portion of this map whose keys range from
249     * <tt>fromKey</tt>, inclusive, to <tt>toKey</tt>, exclusive. (If
250 jsr166 1.8 * <tt>fromKey</tt> and <tt>toKey</tt> are equal, the returned map
251     * is empty.) The returned map is backed by this map, so changes
252     * in the returned map are reflected in this map, and vice-versa.
253     * The returned map supports all optional map operations that this
254     * map supports.
255 dl 1.3 *
256 jsr166 1.8 * <p>The returned map will throw an <tt>IllegalArgumentException</tt>
257     * on an attempt to insert a key outside its range.
258 dl 1.1 *
259 jsr166 1.8 * @param fromKey low endpoint (inclusive) of the keys in the returned map
260     * @param toKey high endpoint (exclusive) of the keys in the returned map
261 dl 1.1 * @return a view of the portion of this map whose keys range from
262 jsr166 1.8 * <tt>fromKey</tt>, inclusive, to <tt>toKey</tt>, exclusive
263     * @throws ClassCastException if <tt>fromKey</tt> and <tt>toKey</tt>
264     * cannot be compared to one another using this map's comparator
265     * (or, if the map has no comparator, using natural ordering).
266     * Implementations may, but are not required to, throw this
267     * exception if <tt>fromKey</tt> or <tt>toKey</tt>
268     * cannot be compared to keys currently in the map.
269     * @throws NullPointerException if <tt>fromKey</tt> or <tt>toKey</tt>
270     * is null and this map does not permit null keys
271     * @throws IllegalArgumentException if <tt>fromKey</tt> is greater than
272     * <tt>toKey</tt>; or if this map itself has a restricted
273     * range, and <tt>fromKey</tt> or <tt>toKey</tt> lies
274     * outside the bounds of the range
275 dl 1.1 */
276 dl 1.3 NavigableMap<K,V> navigableSubMap(K fromKey, K toKey);
277 dl 1.1
278     /**
279 jsr166 1.8 * Returns a view of the portion of this map whose keys are
280     * strictly less than <tt>toKey</tt>. The returned map is backed
281     * by this map, so changes in the returned map are reflected in
282     * this map, and vice-versa. The returned map supports all
283     * optional map operations that this map supports.
284     *
285     * <p>The returned map will throw an <tt>IllegalArgumentException</tt>
286     * on an attempt to insert a key outside its range.
287     *
288     * @param toKey high endpoint (exclusive) of the keys in the returned map
289 dl 1.1 * @return a view of the portion of this map whose keys are strictly
290 jsr166 1.8 * less than <tt>toKey</tt>
291 dl 1.1 * @throws ClassCastException if <tt>toKey</tt> is not compatible
292     * with this map's comparator (or, if the map has no comparator,
293 jsr166 1.8 * if <tt>toKey</tt> does not implement {@link Comparable}).
294     * Implementations may, but are not required to, throw this
295     * exception if <tt>toKey</tt> cannot be compared to keys
296     * currently in the map.
297     * @throws NullPointerException if <tt>toKey</tt> is null
298     * and this map does not permit null keys
299     * @throws IllegalArgumentException if this map itself has a
300     * restricted range, and <tt>toKey</tt> lies outside the
301     * bounds of the range
302 dl 1.1 */
303 dl 1.3 NavigableMap<K,V> navigableHeadMap(K toKey);
304 dl 1.1
305     /**
306     * Returns a view of the portion of this map whose keys are
307 jsr166 1.8 * greater than or equal to <tt>fromKey</tt>. The returned map is
308     * backed by this map, so changes in the returned map are
309     * reflected in this map, and vice-versa. The returned map
310     * supports all optional map operations that this map supports.
311     *
312     * <p>The returned map will throw an <tt>IllegalArgumentException</tt>
313     * on an attempt to insert a key outside its range.
314     *
315     * @param fromKey low endpoint (inclusive) of the keys in the returned map
316 dl 1.1 * @return a view of the portion of this map whose keys are greater
317 jsr166 1.8 * than or equal to <tt>fromKey</tt>
318 dl 1.1 * @throws ClassCastException if <tt>fromKey</tt> is not compatible
319     * with this map's comparator (or, if the map has no comparator,
320 jsr166 1.8 * if <tt>fromKey</tt> does not implement {@link Comparable}).
321     * Implementations may, but are not required to, throw this
322     * exception if <tt>fromKey</tt> cannot be compared to keys
323     * currently in the map.
324     * @throws NullPointerException if <tt>fromKey</tt> is null
325     * and this map does not permit null keys
326     * @throws IllegalArgumentException if this map itself has a
327     * restricted range, and <tt>fromKey</tt> lies outside the
328     * bounds of the range
329 dl 1.1 */
330 jsr166 1.8 NavigableMap<K,V> navigableTailMap(K fromKey);
331 dl 1.1 }