ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/main/java/util/TreeSet.java
(Generate patch)

Comparing jsr166/src/main/java/util/TreeSet.java (file contents):
Revision 1.10 by jsr166, Tue May 3 02:52:07 2005 UTC vs.
Revision 1.11 by jsr166, Mon May 16 08:13:36 2005 UTC

# Line 8 | Line 8
8   package java.util;
9  
10   /**
11 < * This class implements the <tt>Set</tt> interface, backed by a
12 < * <tt>TreeMap</tt> instance.  This class guarantees that the sorted set will
13 < * be in ascending element order, sorted according to the <i>natural order</i>
14 < * of the elements (see <tt>Comparable</tt>), or by the comparator provided at
15 < * set creation time, depending on which constructor is used.<p>
11 > * A {@link NavigableSet} implementation based on a {@link TreeMap}.
12 > * The elements are ordered using their {@linkplain Comparable natural
13 > * ordering}, or by a {@link Comparator} provided at set creation
14 > * time, depending on which constructor is used.
15   *
16 < * This implementation provides guaranteed log(n) time cost for the basic
17 < * operations (<tt>add</tt>, <tt>remove</tt> and <tt>contains</tt>).<p>
16 > * <p>This implementation provides guaranteed log(n) time cost for the basic
17 > * operations (<tt>add</tt>, <tt>remove</tt> and <tt>contains</tt>).
18   *
19 < * Note that the ordering maintained by a set (whether or not an explicit
19 > * <p>Note that the ordering maintained by a set (whether or not an explicit
20   * comparator is provided) must be <i>consistent with equals</i> if it is to
21   * correctly implement the <tt>Set</tt> interface.  (See <tt>Comparable</tt>
22   * or <tt>Comparator</tt> for a precise definition of <i>consistent with
23   * equals</i>.)  This is so because the <tt>Set</tt> interface is defined in
24   * terms of the <tt>equals</tt> operation, but a <tt>TreeSet</tt> instance
25 < * performs all key comparisons using its <tt>compareTo</tt> (or
26 < * <tt>compare</tt>) method, so two keys that are deemed equal by this method
25 > * performs all element comparisons using its <tt>compareTo</tt> (or
26 > * <tt>compare</tt>) method, so two elements that are deemed equal by this method
27   * are, from the standpoint of the set, equal.  The behavior of a set
28   * <i>is</i> well-defined even if its ordering is inconsistent with equals; it
29 < * just fails to obey the general contract of the <tt>Set</tt> interface.<p>
29 > * just fails to obey the general contract of the <tt>Set</tt> interface.
30   *
31 < * <b>Note that this implementation is not synchronized.</b> If multiple
31 > * <p><b>Note that this implementation is not synchronized.</b> If multiple
32   * threads access a set concurrently, and at least one of the threads modifies
33   * the set, it <i>must</i> be synchronized externally.  This is typically
34   * accomplished by synchronizing on some object that naturally encapsulates
# Line 37 | Line 36 | package java.util;
36   * <tt>Collections.synchronizedSet</tt> method.  This is best done at creation
37   * time, to prevent accidental unsynchronized access to the set: <pre>
38   *     SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));
39 < * </pre><p>
39 > * </pre>
40   *
41 < * The Iterators returned by this class's <tt>iterator</tt> method are
41 > * <p>The iterators returned by this class's <tt>iterator</tt> method are
42   * <i>fail-fast</i>: if the set is modified at any time after the iterator is
43   * created, in any way except through the iterator's own <tt>remove</tt>
44 < * method, the iterator will throw a <tt>ConcurrentModificationException</tt>.
44 > * method, the iterator will throw a {@link ConcurrentModificationException}.
45   * Thus, in the face of concurrent modification, the iterator fails quickly
46   * and cleanly, rather than risking arbitrary, non-deterministic behavior at
47   * an undetermined time in the future.
# Line 59 | Line 58 | package java.util;
58   * <a href="{@docRoot}/../guide/collections/index.html">
59   * Java Collections Framework</a>.
60   *
61 + * @param <E> the type of elements maintained by this set
62 + *
63   * @author  Josh Bloch
64   * @version %I%, %G%
65   * @see     Collection
# Line 81 | Line 82 | public class TreeSet<E>
82      private static final Object PRESENT = new Object();
83  
84      /**
85 <     * Constructs a set backed by the specified sorted map.
85 >     * Constructs a set backed by the specified navigable map.
86       */
87      private TreeSet(NavigableMap<E,Object> m) {
88          this.m = m;
89      }
90  
91      /**
92 <     * Constructs a new, empty set, sorted according to the elements' natural
93 <     * order.  All elements inserted into the set must implement the
94 <     * <tt>Comparable</tt> interface.  Furthermore, all such elements must be
95 <     * <i>mutually comparable</i>: <tt>e1.compareTo(e2)</tt> must not throw a
92 >     * Constructs a new, empty tree set, sorted according to the
93 >     * natural ordering of its elements.  All elements inserted into
94 >     * the set must implement the {@link Comparable} interface.
95 >     * Furthermore, all such elements must be <i>mutually
96 >     * comparable</i>: <tt>e1.compareTo(e2)</tt> must not throw a
97       * <tt>ClassCastException</tt> for any elements <tt>e1</tt> and
98 <     * <tt>e2</tt> in the set.  If the user attempts to add an element to the
99 <     * set that violates this constraint (for example, the user attempts to
100 <     * add a string element to a set whose elements are integers), the
101 <     * <tt>add(Object)</tt> call will throw a <tt>ClassCastException</tt>.
102 <     *
101 <     * @see Comparable
98 >     * <tt>e2</tt> in the set.  If the user attempts to add an element
99 >     * to the set that violates this constraint (for example, the user
100 >     * attempts to add a string element to a set whose elements are
101 >     * integers), the <tt>add(Object)</tt> call will throw a
102 >     * <tt>ClassCastException</tt>.
103       */
104      public TreeSet() {
105          this(new TreeMap<E,Object>());
106      }
107  
108      /**
109 <     * Constructs a new, empty set, sorted according to the specified
110 <     * comparator.  All elements inserted into the set must be <i>mutually
111 <     * comparable</i> by the specified comparator: <tt>comparator.compare(e1,
112 <     * e2)</tt> must not throw a <tt>ClassCastException</tt> for any elements
113 <     * <tt>e1</tt> and <tt>e2</tt> in the set.  If the user attempts to add
114 <     * an element to the set that violates this constraint, the
115 <     * <tt>add(Object)</tt> call will throw a <tt>ClassCastException</tt>.
116 <     *
117 <     * @param c the comparator that will be used to sort this set.  A
118 <     *        <tt>null</tt> value indicates that the elements' <i>natural
119 <     *        ordering</i> should be used.
120 <     */
121 <    public TreeSet(Comparator<? super E> c) {
122 <        this(new TreeMap<E,Object>(c));
109 >     * Constructs a new, empty tree set, sorted according to the
110 >     * specified comparator.  All elements inserted into the set must
111 >     * be <i>mutually comparable</i> by the specified comparator:
112 >     * <tt>comparator.compare(e1, e2)</tt> must not throw a
113 >     * <tt>ClassCastException</tt> for any elements <tt>e1</tt> and
114 >     * <tt>e2</tt> in the set.  If the user attempts to add an element
115 >     * to the set that violates this constraint, the
116 >     * <tt>add(Object)</tt> call will throw a
117 >     * <tt>ClassCastException</tt>.
118 >     *
119 >     * @param comparator the comparator that will be used to order this set.
120 >     *        If <tt>null</tt>, the {@linkplain Comparable natural
121 >     *        ordering} of the elements will be used.
122 >     */
123 >    public TreeSet(Comparator<? super E> comparator) {
124 >        this(new TreeMap<E,Object>(comparator));
125      }
126  
127      /**
128 <     * Constructs a new set containing the elements in the specified
129 <     * collection, sorted according to the elements' <i>natural order</i>.
130 <     * All keys inserted into the set must implement the <tt>Comparable</tt>
131 <     * interface.  Furthermore, all such keys must be <i>mutually
132 <     * comparable</i>: <tt>k1.compareTo(k2)</tt> must not throw a
133 <     * <tt>ClassCastException</tt> for any elements <tt>k1</tt> and
134 <     * <tt>k2</tt> in the set.
135 <     *
136 <     * @param c The elements that will comprise the new set.
137 <     *
138 <     * @throws ClassCastException if the keys in the specified collection are
139 <     *         not comparable, or are not mutually comparable.
140 <     * @throws NullPointerException if the specified collection is null.
128 >     * Constructs a new tree set containing the elements in the
129 >     * specified collection, sorted according to the <i>natural
130 >     * ordering</i> of its elements.  All elements inserted into the
131 >     * set must implement the {@link Comparable} interface.
132 >     * Furthermore, all such elements must be <i>mutually
133 >     * comparable</i>: <tt>e1.compareTo(e2)</tt> must not throw a
134 >     * <tt>ClassCastException</tt> for any elements <tt>e1</tt> and
135 >     * <tt>e2</tt> in the set.
136 >     *
137 >     * @param c collection whose elements will comprise the new set
138 >     * @throws ClassCastException if the elements in <tt>c</tt> are
139 >     *         not {@link Comparable}, or are not mutually comparable
140 >     * @throws NullPointerException if the specified collection is null
141       */
142      public TreeSet(Collection<? extends E> c) {
143          this();
# Line 142 | Line 145 | public class TreeSet<E>
145      }
146  
147      /**
148 <     * Constructs a new set containing the same elements as the specified
149 <     * sorted set, sorted according to the same ordering.
148 >     * Constructs a new tree set containing the same elements and
149 >     * using the same ordering as the specified sorted set.
150       *
151 <     * @param s sorted set whose elements will comprise the new set.
152 <     * @throws NullPointerException if the specified sorted set is null.
151 >     * @param s sorted set whose elements will comprise the new set
152 >     * @throws NullPointerException if the specified sorted set is null
153       */
154      public TreeSet(SortedSet<E> s) {
155          this(s.comparator());
# Line 157 | Line 160 | public class TreeSet<E>
160       * Returns an iterator over the elements in this set.  The elements
161       * are returned in ascending order.
162       *
163 <     * @return an iterator over the elements in this set.
163 >     * @return an iterator over the elements in this set
164       */
165      public Iterator<E> iterator() {
166 <        return m.keySet().iterator();
166 >        return m.keySet().iterator();
167      }
168  
169      /**
170       * Returns an iterator over the elements in this set.  The elements
171       * are returned in descending order.
172       *
173 <     * @return an iterator over the elements in this set.
173 >     * @return an iterator over the elements in this set
174       */
175      public Iterator<E> descendingIterator() {
176          return m.descendingKeySet().iterator();
# Line 176 | Line 179 | public class TreeSet<E>
179      /**
180       * Returns the number of elements in this set (its cardinality).
181       *
182 <     * @return the number of elements in this set (its cardinality).
182 >     * @return the number of elements in this set (its cardinality)
183       */
184      public int size() {
185          return m.size();
# Line 185 | Line 188 | public class TreeSet<E>
188      /**
189       * Returns <tt>true</tt> if this set contains no elements.
190       *
191 <     * @return <tt>true</tt> if this set contains no elements.
191 >     * @return <tt>true</tt> if this set contains no elements
192       */
193      public boolean isEmpty() {
194          return m.isEmpty();
# Line 194 | Line 197 | public class TreeSet<E>
197      /**
198       * Returns <tt>true</tt> if this set contains the specified element.
199       *
200 <     * @param o the object to be checked for containment in this set.
201 <     * @return <tt>true</tt> if this set contains the specified element.
199 <     *
200 >     * @param o the object to be checked for containment in this set
201 >     * @return <tt>true</tt> if this set contains the specified element
202       * @throws ClassCastException if the specified object cannot be compared
203 <     *            with the elements currently in the set.
204 <     * @throws NullPointerException if o is <tt>null</tt> and this map
205 <     * uses natural ordering and is non-empty, or its comparator does
206 <     * not tolerate <tt>null</tt> keys.
203 >     *         with the elements currently in the set
204 >     * @throws NullPointerException if the specified element is null and
205 >     *         this set uses natural ordering and is non-empty, or its
206 >     *         comparator does not permit null elements
207       */
208      public boolean contains(Object o) {
209          return m.containsKey(o);
# Line 210 | Line 212 | public class TreeSet<E>
212      /**
213       * Adds the specified element to this set if it is not already present.
214       *
215 <     * @param e element to be added to this set.
215 >     * @param e element to be added to this set
216       * @return <tt>true</tt> if the set did not already contain the specified
217 <     *         element.
216 <     *
217 >     *         element
218       * @throws ClassCastException if the specified object cannot be compared
219 <     *            with the elements currently in the set.
220 <     * @throws NullPointerException if e is <tt>null</tt> and this map
221 <     * uses natural ordering and is non-empty, or its comparator does
222 <     * not tolerate <tt>null</tt> keys.
219 >     *         with the elements currently in the set
220 >     * @throws NullPointerException if the specified element is null and
221 >     *         this set uses natural ordering and is non-empty, or its
222 >     *         comparator does not permit null elements
223       */
224      public boolean add(E e) {
225          return m.put(e, PRESENT)==null;
# Line 227 | Line 228 | public class TreeSet<E>
228      /**
229       * Removes the specified element from this set if it is present.
230       *
231 <     * @param o object to be removed from this set, if present.
232 <     * @return <tt>true</tt> if the set contained the specified element.
232 <     *
231 >     * @param o object to be removed from this set, if present
232 >     * @return <tt>true</tt> if the set contained the specified element
233       * @throws ClassCastException if the specified object cannot be compared
234 <     *            with the elements currently in the set.
235 <     * @throws NullPointerException if o is <tt>null</tt> and this map
236 <     * uses natural ordering and is non-empty, or its comparator does
237 <     * not tolerate <tt>null</tt> keys.
234 >     *         with the elements currently in the set
235 >     * @throws NullPointerException if the specified element is null and
236 >     *         this set uses natural ordering and is non-empty, or its
237 >     *         comparator does not permit null elements
238       */
239      public boolean remove(Object o) {
240          return m.remove(o)==PRESENT;
# Line 242 | Line 242 | public class TreeSet<E>
242  
243      /**
244       * Removes all of the elements from this set.
245 +     * The set will be empty after this call returns.
246       */
247      public void clear() {
248          m.clear();
# Line 251 | Line 252 | public class TreeSet<E>
252       * Adds all of the elements in the specified collection to this set.
253       *
254       * @param c elements to be added
255 <     * @return <tt>true</tt> if this set changed as a result of the call.
255 <     *
255 >     * @return <tt>true</tt> if this set changed as a result of the call
256       * @throws ClassCastException if the elements provided cannot be compared
257 <     *            with the elements currently in the set.
258 <     * @throws NullPointerException if the specified collection is
259 <     * <tt>null</tt> or if any element is <tt>null</tt> and this map
260 <     * uses natural ordering, or its comparator does not tolerate
261 <     * <tt>null</tt> keys.
257 >     *         with the elements currently in the set
258 >     * @throws NullPointerException if the specified collection is null or
259 >     *         if any element is null and this set uses natural ordering, or
260 >     *         its comparator does not permit null elements
261       */
262      public  boolean addAll(Collection<? extends E> c) {
263          // Use linear-time version if applicable
# Line 278 | Line 277 | public class TreeSet<E>
277      }
278  
279      /**
280 <     * Returns a view of the portion of this set whose elements range
282 <     * from <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
283 <     * exclusive.  (If <tt>fromElement</tt> and <tt>toElement</tt> are
284 <     * equal, the returned navigable set is empty.)  The returned
285 <     * navigable set is backed by this set, so changes in the returned
286 <     * navigable set are reflected in this set, and vice-versa.  The
287 <     * returned navigable set supports all optional Set operations.<p>
288 <     *
289 <     * The navigable set returned by this method will throw an
290 <     * <tt>IllegalArgumentException</tt> if the user attempts to insert an
291 <     * element outside the specified range.<p>
292 <     *
293 <     * Note: this method always returns a <i>half-open range</i>
294 <     * (which includes its low endpoint but not its high endpoint).
295 <     * If you need a <i>closed range</i> (which includes both
296 <     * endpoints), and the element type allows for calculation of the
297 <     * successor of a specified value, merely request the subrange
298 <     * from <tt>lowEndpoint</tt> to <tt>successor(highEndpoint)</tt>.
299 <     * For example, suppose that <tt>s</tt> is a navigable set of
300 <     * strings.  The following idiom obtains a view containing all of
301 <     * the strings in <tt>s</tt> from <tt>low</tt> to <tt>high</tt>,
302 <     * inclusive:
303 <     * <pre> NavigableSet sub = s.navigableSubSet(low, high+"\0");
304 <     * </pre>
305 <     *
306 <     * A similar technique can be used to generate an <i>open range</i> (which
307 <     * contains neither endpoint).  The following idiom obtains a view
308 <     * containing all of the strings in <tt>s</tt> from <tt>low</tt> to
309 <     * <tt>high</tt>, exclusive: <pre>
310 <     *     NavigableSet sub = s.navigableSubSet(low+"\0", high);
311 <     * </pre>
312 <     *
313 <     * @param fromElement low endpoint (inclusive) of the range.
314 <     * @param toElement high endpoint (exclusive) of the range.
315 <     * @return a view of the portion of this set whose elements range from
316 <     *         <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
317 <     *         exclusive.
318 <     * @throws ClassCastException if <tt>fromElement</tt> and
319 <     *         <tt>toElement</tt> cannot be compared to one another using
320 <     *         this set's comparator (or, if the set has no comparator,
321 <     *         using natural ordering).
322 <     * @throws IllegalArgumentException if <tt>fromElement</tt> is greater than
323 <     *         <tt>toElement</tt>.
280 >     * @throws ClassCastException {@inheritDoc}
281       * @throws NullPointerException if <tt>fromElement</tt> or
282 <     *         <tt>toElement</tt> is <tt>null</tt> and this set uses natural
283 <     *         order, or its comparator does not tolerate <tt>null</tt>
284 <     *         elements.
282 >     *         <tt>toElement</tt> is null and this set uses natural ordering,
283 >     *         or its comparator does not permit null elements
284 >     * @throws IllegalArgumentException {@inheritDoc}
285       */
286      public NavigableSet<E> navigableSubSet(E fromElement, E toElement) {
287          return new TreeSet<E>(m.navigableSubMap(fromElement, toElement));
288      }
289  
290      /**
291 <     * Returns a view of the portion of this set whose elements are
292 <     * strictly less than <tt>toElement</tt>.  The returned navigable
293 <     * set is backed by this set, so changes in the returned navigable
294 <     * set are reflected in this set, and vice-versa.  The returned
295 <     * navigable set supports all optional set operations.<p>
339 <     *
340 <     * The navigable set returned by this method will throw an
341 <     * <tt>IllegalArgumentException</tt> if the user attempts to
342 <     * insert an element greater than or equal to
343 <     * <tt>toElement</tt>.<p>
344 <     *
345 <     * Note: this method always returns a view that does not contain
346 <     * its (high) endpoint.  If you need a view that does contain this
347 <     * endpoint, and the element type allows for calculation of the
348 <     * successor of a specified value, merely request a headSet
349 <     * bounded by <tt>successor(highEndpoint)</tt>.  For example,
350 <     * suppose that <tt>s</tt> is a navigable set of strings.  The
351 <     * following idiom obtains a view containing all of the strings in
352 <     * <tt>s</tt> that are less than or equal to <tt>high</tt>:
353 <     * <pre> NavigableSet head = s.navigableHeadSet(high+"\0");</pre>
354 <     *
355 <     * @param toElement high endpoint (exclusive) of the headSet.
356 <     * @return a view of the portion of this set whose elements are strictly
357 <     *         less than <tt>toElement</tt>.
358 <     * @throws ClassCastException if <tt>toElement</tt> is not compatible
359 <     *         with this set's comparator (or, if the set has no comparator,
360 <     *         if <tt>toElement</tt> does not implement <tt>Comparable</tt>).
361 <     * @throws IllegalArgumentException if this set is itself a subset,
362 <     *         and <tt>toElement</tt> is not within the
363 <     *         specified range of the subset.
364 <     * @throws NullPointerException if <tt>toElement</tt> is <tt>null</tt> and
365 <     *         this set uses natural ordering, or its comparator does
366 <     *         not tolerate <tt>null</tt> elements.
291 >     * @throws ClassCastException {@inheritDoc}
292 >     * @throws NullPointerException if <tt>toElement</tt> is null and
293 >     *         this set uses natural ordering, or its comparator does
294 >     *         not permit null elements
295 >     * @throws IllegalArgumentException {@inheritDoc}
296       */
297      public NavigableSet<E> navigableHeadSet(E toElement) {
298          return new TreeSet<E>(m.navigableHeadMap(toElement));
299      }
300  
301      /**
302 <     * Returns a view of the portion of this set whose elements are
303 <     * greater than or equal to <tt>fromElement</tt>.  The returned
304 <     * navigable set is backed by this set, so changes in the returned
305 <     * navigable set are reflected in this set, and vice-versa.  The
306 <     * returned navigable set supports all optional set operations.<p>
378 <     *
379 <     * The navigable set returned by this method will throw an
380 <     * <tt>IllegalArgumentException</tt> if the user attempts to insert an
381 <     * element less than <tt>fromElement</tt>.
382 <     *
383 <     * Note: this method always returns a view that contains its (low)
384 <     * endpoint.  If you need a view that does not contain this
385 <     * endpoint, and the element type allows for calculation of the
386 <     * successor of a specified value, merely request a tailSet
387 <     * bounded by <tt>successor(lowEndpoint)</tt>.  For example,
388 <     * suppose that <tt>s</tt> is a navigable set of strings.  The
389 <     * following idiom obtains a view containing all of the strings in
390 <     * <tt>s</tt> that are strictly greater than <tt>low</tt>:
391 <     * <pre>  NavigableSet tail = s.navigableTailSet(low+"\0");
392 <     * </pre>
393 <     *
394 <     * @param fromElement low endpoint (inclusive) of the tailSet.
395 <     * @return a view of the portion of this set whose elements are
396 <     *         greater than or equal to <tt>fromElement</tt>.
397 <     * @throws ClassCastException if <tt>fromElement</tt> is not compatible
398 <     *         with this set's comparator (or, if the set has no comparator,
399 <     *         if <tt>fromElement</tt> does not implement <tt>Comparable</tt>).
400 <     * @throws IllegalArgumentException if this set is itself a subset,
401 <     *         and <tt>fromElement</tt> is not within the
402 <     *         specified range of the subset.
403 <     * @throws NullPointerException if <tt>fromElement</tt> is <tt>null</tt>
404 <     *         and this set uses natural ordering, or its comparator does
405 <     *         not tolerate <tt>null</tt> elements.
302 >     * @throws ClassCastException {@inheritDoc}
303 >     * @throws NullPointerException if <tt>fromElement</tt> is null and
304 >     *         this set uses natural ordering, or its comparator does
305 >     *         not permit null elements
306 >     * @throws IllegalArgumentException {@inheritDoc}
307       */
308      public NavigableSet<E> navigableTailSet(E fromElement) {
309          return new TreeSet<E>(m.navigableTailMap(fromElement));
310      }
311  
411
312      /**
313 <     * Equivalent to <tt>navigableSubSet</tt> but with a return
314 <     * type conforming to the <tt>SortedSet</tt> interface.
315 <     * @param fromElement low endpoint (inclusive) of the range.
316 <     * @param toElement high endpoint (exclusive) of the range.
317 <     * @return a view of the portion of this set whose elements range from
318 <     *         <tt>fromElement</tt>, inclusive, to <tt>toElement</tt>,
419 <     *         exclusive.
420 <     * @throws ClassCastException if <tt>fromElement</tt> and
421 <     *         <tt>toElement</tt> cannot be compared to one another using
422 <     *         this set's comparator (or, if the set has no comparator,
423 <     *         using natural ordering).
424 <     * @throws IllegalArgumentException if <tt>fromElement</tt> is greater than
425 <     *         <tt>toElement</tt>.
313 >     * Equivalent to {@link #navigableSubSet} but with a return type
314 >     * conforming to the <tt>SortedSet</tt> interface.
315 >     *
316 >     * <p>{@inheritDoc}
317 >     *
318 >     * @throws ClassCastException {@inheritDoc}
319       * @throws NullPointerException if <tt>fromElement</tt> or
320 <     *         <tt>toElement</tt> is <tt>null</tt> and this set uses natural
321 <     *         order, or its comparator does not tolerate <tt>null</tt>
322 <     *         elements.
320 >     *         <tt>toElement</tt> is null and this set uses natural ordering,
321 >     *         or its comparator does not permit null elements
322 >     * @throws IllegalArgumentException {@inheritDoc}
323       */
324      public SortedSet<E> subSet(E fromElement, E toElement) {
325          return new TreeSet<E>(m.navigableSubMap(fromElement, toElement));
326      }
327  
328      /**
329 <     * Equivalent to <tt>navigableHeadSet</tt> but with a return
330 <     * type conforming to the <tt>SortedSet</tt> interface.
329 >     * Equivalent to {@link #navigableHeadSet} but with a return type
330 >     * conforming to the <tt>SortedSet</tt> interface.
331 >     *
332 >     * <p>{@inheritDoc}
333       *
334 <     * @param toElement high endpoint (exclusive) of the headSet.
335 <     * @return a view of the portion of this set whose elements are strictly
336 <     *         less than <tt>toElement</tt>.
337 <     * @throws ClassCastException if <tt>toElement</tt> is not compatible
338 <     *         with this set's comparator (or, if the set has no comparator,
444 <     *         if <tt>toElement</tt> does not implement <tt>Comparable</tt>).
445 <     * @throws IllegalArgumentException if this set is itself a subset,
446 <     *         and <tt>toElement</tt> is not within the
447 <     *         specified range of the subset.
448 <     * @throws NullPointerException if <tt>toElement</tt> is <tt>null</tt> and
449 <     *         this set uses natural ordering, or its comparator does
450 <     *         not tolerate <tt>null</tt> elements.
334 >     * @throws ClassCastException {@inheritDoc}
335 >     * @throws NullPointerException if <tt>toElement</tt> is null
336 >     *         and this set uses natural ordering, or its comparator does
337 >     *         not permit null elements
338 >     * @throws IllegalArgumentException {@inheritDoc}
339       */
340      public SortedSet<E> headSet(E toElement) {
341          return new TreeSet<E>(m.navigableHeadMap(toElement));
342      }
343  
344      /**
345 <     * Equivalent to <tt>navigableTailSet</tt> but with a return
346 <     * type conforming to the <tt>SortedSet</tt> interface.
347 <     * @param fromElement low endpoint (inclusive) of the tailSet.
348 <     * @return a view of the portion of this set whose elements are
349 <     *         greater than or equal to <tt>fromElement</tt>.
350 <     * @throws ClassCastException if <tt>fromElement</tt> is not compatible
351 <     *         with this set's comparator (or, if the set has no comparator,
352 <     *         if <tt>fromElement</tt> does not implement <tt>Comparable</tt>).
353 <     * @throws IllegalArgumentException if this set is itself a subset,
354 <     *         and <tt>fromElement</tt> is not within the
467 <     *         specified range of the subset.
468 <     * @throws NullPointerException if <tt>fromElement</tt> is <tt>null</tt>
469 <     *         and this set uses natural ordering, or its comparator does
470 <     *         not tolerate <tt>null</tt> elements.
345 >     * Equivalent to {@link #navigableTailSet} but with a return type
346 >     * conforming to the <tt>SortedSet</tt> interface.
347 >     *
348 >     * <p>{@inheritDoc}
349 >     *
350 >     * @throws ClassCastException {@inheritDoc}
351 >     * @throws NullPointerException if <tt>fromElement</tt> is null
352 >     *         and this set uses natural ordering, or its comparator does
353 >     *         not permit null elements
354 >     * @throws IllegalArgumentException {@inheritDoc}
355       */
356      public SortedSet<E> tailSet(E fromElement) {
357          return new TreeSet<E>(m.navigableTailMap(fromElement));
358      }
359  
476    /**
477     * Returns the comparator used to order this sorted set, or <tt>null</tt>
478     * if this tree set uses its elements natural ordering.
479     *
480     * @return the comparator used to order this sorted set, or <tt>null</tt>
481     * if this tree set uses its elements natural ordering.
482     */
360      public Comparator<? super E> comparator() {
361          return m.comparator();
362      }
363  
364      /**
365 <     * Returns the first (lowest) element currently in this sorted set.
489 <     *
490 <     * @return the first (lowest) element currently in this sorted set.
491 <     * @throws    NoSuchElementException sorted set is empty.
365 >     * @throws NoSuchElementException {@inheritDoc}
366       */
367      public E first() {
368          return m.firstKey();
369      }
370  
371      /**
372 <     * Returns the last (highest) element currently in this sorted set.
499 <     *
500 <     * @return the last (highest) element currently in this sorted set.
501 <     * @throws    NoSuchElementException sorted set is empty.
372 >     * @throws NoSuchElementException {@inheritDoc}
373       */
374      public E last() {
375          return m.lastKey();
# Line 506 | Line 377 | public class TreeSet<E>
377  
378      // NavigableSet API methods
379  
509
380      /**
381 <     * Returns an element greater than or equal to the given element, or
382 <     * <tt>null</tt> if there is no such element.
383 <     *
384 <     * @param e the value to match
515 <     * @return an element greater than or equal to given element, or
516 <     * <tt>null</tt> if there is no such element.
517 <     * @throws ClassCastException if e cannot be compared with the elements
518 <     *            currently in the set.
519 <     * @throws NullPointerException if e is <tt>null</tt> and this map
520 <     * uses natural ordering and is non-empty, or its comparator does
521 <     * not tolerate <tt>null</tt> keys.
522 <     */
523 <    public E ceiling(E e) {
524 <        return m.ceilingKey(e);
525 <    }
526 <
527 <    /**
528 <     * Returns an element strictly less than the given element, or
529 <     * <tt>null</tt> if there is no such element.
530 <     *
531 <     * @param e the value to match
532 <     * @return the greatest element less than the given element, or
533 <     * <tt>null</tt> if there is no such element.
534 <     * @throws ClassCastException if e cannot be compared with the elements
535 <     *            currently in the set.
536 <     * @throws NullPointerException if e is <tt>null</tt> and this map
537 <     * uses natural ordering and is non-empty, or its comparator does
538 <     * not tolerate <tt>null</tt> keys.
381 >     * @throws ClassCastException {@inheritDoc}
382 >     * @throws NullPointerException if the specified element is null and
383 >     *         this set uses natural ordering and is non-empty,
384 >     *         or its comparator does not permit null elements
385       */
386      public E lower(E e) {
387          return m.lowerKey(e);
388      }
389  
390      /**
391 <     * Returns an element less than or equal to the given element, or
392 <     * <tt>null</tt> if there is no such element.
393 <     *
394 <     * @param e the value to match
549 <     * @return the greatest element less than or equal to given
550 <     * element, or <tt>null</tt> if there is no such element.
551 <     * @throws ClassCastException if e cannot be compared with the elements
552 <     *            currently in the set.
553 <     * @throws NullPointerException if e is <tt>null</tt> and this map
554 <     * uses natural ordering and is non-empty, or its comparator does
555 <     * not tolerate <tt>null</tt> keys.
391 >     * @throws ClassCastException {@inheritDoc}
392 >     * @throws NullPointerException if the specified element is null and
393 >     *         this set uses natural ordering and is non-empty,
394 >     *         or its comparator does not permit null elements
395       */
396      public E floor(E e) {
397          return m.floorKey(e);
398      }
399  
400      /**
401 <     * Returns an element strictly greater than the given element, or
402 <     * <tt>null</tt> if there is no such element.
403 <     *
404 <     * @param e the value to match
566 <     * @return the least element greater than the given element, or
567 <     * <tt>null</tt> if there is no such element.
568 <     * @throws ClassCastException if e cannot be compared with the elements
569 <     *            currently in the set.
570 <     * @throws NullPointerException if e is <tt>null</tt> and this map
571 <     * uses natural ordering and is non-empty, or its comparator does
572 <     * not tolerate <tt>null</tt> keys.
401 >     * @throws ClassCastException {@inheritDoc}
402 >     * @throws NullPointerException if the specified element is null and
403 >     *         this set uses natural ordering and is non-empty,
404 >     *         or its comparator does not permit null elements
405       */
406 <    public E higher(E e) {
407 <        return m.higherKey(e);
406 >    public E ceiling(E e) {
407 >        return m.ceilingKey(e);
408      }
409  
410      /**
411 <     * Retrieves and removes the first (lowest) element.
412 <     *
413 <     * @return the least element, or <tt>null</tt> if empty.
411 >     * @throws ClassCastException {@inheritDoc}
412 >     * @throws NullPointerException if the specified element is null and
413 >     *         this set uses natural ordering and is non-empty,
414 >     *         or its comparator does not permit null elements
415       */
416 +    public E higher(E e) {
417 +        return m.higherKey(e);
418 +    }
419 +
420      public E pollFirst() {
421          Map.Entry<E,?> e = m.pollFirstEntry();
422          return (e == null)? null : e.getKey();
423      }
424  
588    /**
589     * Retrieves and removes the last (highest) element.
590     *
591     * @return the last element, or <tt>null</tt> if empty.
592     */
425      public E pollLast() {
426          Map.Entry<E,?> e = m.pollLastEntry();
427          return (e == null)? null : e.getKey();
# Line 599 | Line 431 | public class TreeSet<E>
431       * Returns a shallow copy of this <tt>TreeSet</tt> instance. (The elements
432       * themselves are not cloned.)
433       *
434 <     * @return a shallow copy of this set.
434 >     * @return a shallow copy of this set
435       */
436      public Object clone() {
437          TreeSet<E> clone = null;
# Line 619 | Line 451 | public class TreeSet<E>
451       * serialize it).
452       *
453       * @serialData Emits the comparator used to order this set, or
454 <     *             <tt>null</tt> if it obeys its elements' natural ordering
455 <     *             (Object), followed by the size of the set (the number of
456 <     *             elements it contains) (int), followed by all of its
457 <     *             elements (each an Object) in order (as determined by the
458 <     *             set's Comparator, or by the elements' natural ordering if
454 >     *             <tt>null</tt> if it obeys its elements' natural ordering
455 >     *             (Object), followed by the size of the set (the number of
456 >     *             elements it contains) (int), followed by all of its
457 >     *             elements (each an Object) in order (as determined by the
458 >     *             set's Comparator, or by the elements' natural ordering if
459       *             the set has no Comparator).
460       */
461      private void writeObject(java.io.ObjectOutputStream s)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines