java.util
Class TreeSet<T>

java.lang.Object
  extended by java.util.AbstractCollection<E>
      extended by java.util.AbstractSet<T>
          extended by java.util.TreeSet<T>
All Implemented Interfaces:
Serializable, Cloneable, Iterable<T>, Collection<T>, java.util.NavigableSet<T>, Set<T>, SortedSet<T>

public class TreeSet<T>
extends AbstractSet<T>
implements java.util.NavigableSet<T>, Cloneable, Serializable

This class provides a TreeMap-backed implementation of the SortedSet interface. The elements will be sorted according to their natural order, or according to the provided Comparator.

Most operations are O(log n), but there is so much overhead that this makes small sets expensive. Note that the ordering must be consistent with equals to correctly implement the Set interface. If this condition is violated, the set is still well-behaved, but you may have suprising results when comparing it to other sets.

This implementation is not synchronized. If you need to share this between multiple threads, do something like:
SortedSet s = Collections.synchronizedSortedSet(new TreeSet(...));

The iterators are fail-fast, meaning that any structural modification, except for remove() called on the iterator itself, cause the iterator to throw a ConcurrentModificationException rather than exhibit non-deterministic behavior.

Since:
1.2
See Also:
Collection, Set, HashSet, LinkedHashSet, Comparable, Comparator, Collections.synchronizedSortedSet(SortedSet), TreeMap, Serialized Form

Constructor Summary
TreeSet()
          Construct a new TreeSet whose backing TreeMap using the "natural" ordering of keys.
TreeSet(Collection<? extends T> collection)
          Construct a new TreeSet whose backing TreeMap uses the "natural" orering of the keys and which contains all of the elements in the supplied Collection.
TreeSet(Comparator<? super T> comparator)
          Construct a new TreeSet whose backing TreeMap uses the supplied Comparator.
TreeSet(SortedSet<T> sortedSet)
          Construct a new TreeSet, using the same key ordering as the supplied SortedSet and containing all of the elements in the supplied SortedSet.
 
Method Summary
 boolean add(T obj)
          Adds the spplied Object to the Set if it is not already in the Set; returns true if the element is added, false otherwise.
 boolean addAll(Collection<? extends T> c)
          Adds all of the elements in the supplied Collection to this TreeSet.
 T ceiling(T e)
          Returns the least or lowest element in the set greater than or equal to the given element, or null if there is no such element.
 void clear()
          Removes all elements in this Set.
 Object clone()
          Returns a shallow copy of this Set.
 Comparator<? super T> comparator()
          Returns this Set's comparator.
 boolean contains(Object obj)
          Returns true if this Set contains the supplied Object, false otherwise.
 Iterator<T> descendingIterator()
          Returns an iterator over the elements of this set in descending order.
 java.util.NavigableSet<T> descendingSet()
          Returns a view of the set in reverse order.
 T first()
          Returns the first (by order) element in this Set.
 T floor(T e)
          Returns the greatest or highest element in the set less than or equal to the given element, or null if there is no such element.
 SortedSet<T> headSet(T to)
          Returns a view of this Set including all elements less than to.
 java.util.NavigableSet<T> headSet(T to, boolean inclusive)
          Returns a view of this Set including all elements less than (or equal to, if inclusive is true) to.
 T higher(T e)
          Returns the least or lowest element in the set strictly greater than the given element, or null if there is no such element.
 boolean isEmpty()
          Returns true if this Set has size 0, false otherwise.
 Iterator<T> iterator()
          Returns in Iterator over the elements in this TreeSet, which traverses in ascending order.
 T last()
          Returns the last (by order) element in this Set.
 T lower(T e)
          Returns the greatest or highest element in the set strictly less than the given element, or null if there is no such element.
 T pollFirst()
          Removes and returns the least or lowest element in the set, or null if the map is empty.
 T pollLast()
          Removes and returns the greatest or highest element in the set, or null if the map is empty.
 boolean remove(Object obj)
          If the supplied Object is in this Set, it is removed, and true is returned; otherwise, false is returned.
 int size()
          Returns the number of elements in this Set
 java.util.NavigableSet<T> subSet(T from, boolean fromInclusive, T to, boolean toInclusive)
          Returns a view of this Set including all elements greater than (or equal to, if fromInclusive is true from and less than (or equal to, if toInclusive is true) to.
 SortedSet<T> subSet(T from, T to)
          Returns a view of this Set including all elements greater or equal to from and less than to (a half-open interval).
 SortedSet<T> tailSet(T from)
          Returns a view of this Set including all elements greater or equal to from.
 java.util.NavigableSet<T> tailSet(T from, boolean inclusive)
          Returns a view of this Set including all elements greater (or equal to, if inclusive is true) from.
 
Methods inherited from class java.util.AbstractSet
equals, hashCode, removeAll
 
Methods inherited from class java.util.AbstractCollection
containsAll, retainAll, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Set
containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray
 

Constructor Detail

TreeSet

public TreeSet()
Construct a new TreeSet whose backing TreeMap using the "natural" ordering of keys. Elements that are not mutually comparable will cause ClassCastExceptions down the road.

See Also:
Comparable

TreeSet

public TreeSet(Comparator<? super T> comparator)
Construct a new TreeSet whose backing TreeMap uses the supplied Comparator. Elements that are not mutually comparable will cause ClassCastExceptions down the road.

Parameters:
comparator - the Comparator this Set will use

TreeSet

public TreeSet(Collection<? extends T> collection)
Construct a new TreeSet whose backing TreeMap uses the "natural" orering of the keys and which contains all of the elements in the supplied Collection. This runs in n*log(n) time.

Parameters:
collection - the new Set will be initialized with all of the elements in this Collection
Throws:
ClassCastException - if the elements of the collection are not comparable
NullPointerException - if the collection is null
See Also:
Comparable

TreeSet

public TreeSet(SortedSet<T> sortedSet)
Construct a new TreeSet, using the same key ordering as the supplied SortedSet and containing all of the elements in the supplied SortedSet. This constructor runs in linear time.

Parameters:
sortedSet - the new TreeSet will use this SortedSet's comparator and will initialize itself with all its elements
Throws:
NullPointerException - if sortedSet is null
Method Detail

add

public boolean add(T obj)
Adds the spplied Object to the Set if it is not already in the Set; returns true if the element is added, false otherwise.

Specified by:
add in interface Collection<T>
Specified by:
add in interface Set<T>
Overrides:
add in class AbstractCollection<T>
Parameters:
obj - the Object to be added to this Set
Returns:
true if the add operation caused the Collection to change
Throws:
ClassCastException - if the element cannot be compared with objects already in the set

addAll

public boolean addAll(Collection<? extends T> c)
Adds all of the elements in the supplied Collection to this TreeSet.

Specified by:
addAll in interface Collection<T>
Specified by:
addAll in interface Set<T>
Overrides:
addAll in class AbstractCollection<T>
Parameters:
c - The collection to add
Returns:
true if the Set is altered, false otherwise
Throws:
NullPointerException - if c is null
ClassCastException - if an element in c cannot be compared with objects already in the set
See Also:
AbstractCollection.add(Object)

clear

public void clear()
Removes all elements in this Set.

Specified by:
clear in interface Collection<T>
Specified by:
clear in interface Set<T>
Overrides:
clear in class AbstractCollection<T>
See Also:
Iterator.remove()

clone

public Object clone()
Returns a shallow copy of this Set. The elements are not cloned.

Overrides:
clone in class Object
Returns:
the cloned set
See Also:
Cloneable

comparator

public Comparator<? super T> comparator()
Returns this Set's comparator.

Specified by:
comparator in interface SortedSet<T>
Returns:
the comparator, or null if the set uses natural ordering

contains

public boolean contains(Object obj)
Returns true if this Set contains the supplied Object, false otherwise.

Specified by:
contains in interface Collection<T>
Specified by:
contains in interface Set<T>
Overrides:
contains in class AbstractCollection<T>
Parameters:
obj - the Object to check for
Returns:
true if it is in the set
Throws:
ClassCastException - if obj cannot be compared with objects already in the set

first

public T first()
Returns the first (by order) element in this Set.

Specified by:
first in interface SortedSet<T>
Returns:
the first element
Throws:
NoSuchElementException - if the set is empty

headSet

public SortedSet<T> headSet(T to)
Returns a view of this Set including all elements less than to. The returned set is backed by the original, so changes in one appear in the other. The subset will throw an IllegalArgumentException for any attempt to access or add an element beyond the specified cutoff. The returned set does not include the endpoint; if you want inclusion, pass the successor element or call #headSet(T,boolean). This call is equivalent to headSet(to, false).

Specified by:
headSet in interface java.util.NavigableSet<T>
Specified by:
headSet in interface SortedSet<T>
Parameters:
to - the (exclusive) cutoff point
Returns:
a view of the set less than the cutoff
Throws:
ClassCastException - if to is not compatible with the comparator (or is not Comparable, for natural ordering)
NullPointerException - if to is null, but the comparator does not tolerate null elements

headSet

public java.util.NavigableSet<T> headSet(T to,
                                         boolean inclusive)
Returns a view of this Set including all elements less than (or equal to, if inclusive is true) to. The returned set is backed by the original, so changes in one appear in the other. The subset will throw an IllegalArgumentException for any attempt to access or add an element beyond the specified cutoff.

Specified by:
headSet in interface java.util.NavigableSet<T>
Parameters:
to - the cutoff point
inclusive - true if to should be included.
Returns:
a view of the set for the specified range.
Throws:
ClassCastException - if to is not compatible with the comparator (or is not Comparable, for natural ordering)
NullPointerException - if to is null, but the comparator does not tolerate null elements

isEmpty

public boolean isEmpty()
Returns true if this Set has size 0, false otherwise.

Specified by:
isEmpty in interface Collection<T>
Specified by:
isEmpty in interface Set<T>
Overrides:
isEmpty in class AbstractCollection<T>
Returns:
true if the set is empty
See Also:
AbstractCollection.size()

iterator

public Iterator<T> iterator()
Returns in Iterator over the elements in this TreeSet, which traverses in ascending order.

Specified by:
iterator in interface Iterable<T>
Specified by:
iterator in interface Collection<T>
Specified by:
iterator in interface java.util.NavigableSet<T>
Specified by:
iterator in interface Set<T>
Specified by:
iterator in class AbstractCollection<T>
Returns:
an iterator

last

public T last()
Returns the last (by order) element in this Set.

Specified by:
last in interface SortedSet<T>
Returns:
the last element
Throws:
NoSuchElementException - if the set is empty

remove

public boolean remove(Object obj)
If the supplied Object is in this Set, it is removed, and true is returned; otherwise, false is returned.

Specified by:
remove in interface Collection<T>
Specified by:
remove in interface Set<T>
Overrides:
remove in class AbstractCollection<T>
Parameters:
obj - the Object to remove from this Set
Returns:
true if the set was modified
Throws:
ClassCastException - if obj cannot be compared to set elements
See Also:
Iterator.remove()

size

public int size()
Returns the number of elements in this Set

Specified by:
size in interface Collection<T>
Specified by:
size in interface Set<T>
Specified by:
size in class AbstractCollection<T>
Returns:
the set size

subSet

public SortedSet<T> subSet(T from,
                           T to)
Returns a view of this Set including all elements greater or equal to from and less than to (a half-open interval). The returned set is backed by the original, so changes in one appear in the other. The subset will throw an IllegalArgumentException for any attempt to access or add an element beyond the specified cutoffs. The returned set includes the low endpoint but not the high; if you want to reverse this behavior on either end, pass in the successor element or call #subSet(T,boolean,T,boolean). This is equivalent to calling subSet(from,true,to,false).

Specified by:
subSet in interface java.util.NavigableSet<T>
Specified by:
subSet in interface SortedSet<T>
Parameters:
from - the (inclusive) low cutoff point
to - the (exclusive) high cutoff point
Returns:
a view of the set between the cutoffs
Throws:
ClassCastException - if either cutoff is not compatible with the comparator (or is not Comparable, for natural ordering)
NullPointerException - if from or to is null, but the comparator does not tolerate null elements
IllegalArgumentException - if from is greater than to

subSet

public java.util.NavigableSet<T> subSet(T from,
                                        boolean fromInclusive,
                                        T to,
                                        boolean toInclusive)
Returns a view of this Set including all elements greater than (or equal to, if fromInclusive is true from and less than (or equal to, if toInclusive is true) to. The returned set is backed by the original, so changes in one appear in the other. The subset will throw an IllegalArgumentException for any attempt to access or add an element beyond the specified cutoffs.

Specified by:
subSet in interface java.util.NavigableSet<T>
Parameters:
from - the low cutoff point
fromInclusive - true if from should be included.
to - the high cutoff point
toInclusive - true if to should be included.
Returns:
a view of the set for the specified range.
Throws:
ClassCastException - if either cutoff is not compatible with the comparator (or is not Comparable, for natural ordering)
NullPointerException - if from or to is null, but the comparator does not tolerate null elements
IllegalArgumentException - if from is greater than to

tailSet

public SortedSet<T> tailSet(T from)
Returns a view of this Set including all elements greater or equal to from. The returned set is backed by the original, so changes in one appear in the other. The subset will throw an IllegalArgumentException for any attempt to access or add an element beyond the specified cutoff. The returned set includes the endpoint; if you want to exclude it, pass in the successor element or call #tailSet(T,boolean). This is equivalent to calling tailSet(from, true).

Specified by:
tailSet in interface java.util.NavigableSet<T>
Specified by:
tailSet in interface SortedSet<T>
Parameters:
from - the (inclusive) low cutoff point
Returns:
a view of the set above the cutoff
Throws:
ClassCastException - if from is not compatible with the comparator (or is not Comparable, for natural ordering)
NullPointerException - if from is null, but the comparator does not tolerate null elements

tailSet

public java.util.NavigableSet<T> tailSet(T from,
                                         boolean inclusive)
Returns a view of this Set including all elements greater (or equal to, if inclusive is true) from. The returned set is backed by the original, so changes in one appear in the other. The subset will throw an IllegalArgumentException for any attempt to access or add an element beyond the specified cutoff.

Specified by:
tailSet in interface java.util.NavigableSet<T>
Parameters:
from - the low cutoff point.
inclusive - true if from should be included.
Returns:
a view of the set for the specified range.
Throws:
ClassCastException - if from is not compatible with the comparator (or is not Comparable, for natural ordering)
NullPointerException - if from is null, but the comparator does not tolerate null elements

ceiling

public T ceiling(T e)
Returns the least or lowest element in the set greater than or equal to the given element, or null if there is no such element.

Specified by:
ceiling in interface java.util.NavigableSet<T>
Parameters:
e - the element relative to the returned element.
Returns:
the least element greater than or equal to the given element, or null if there is no such element.
Throws:
ClassCastException - if the specified element can not be compared with those in the map.
NullPointerException - if the element is null and this set either uses natural ordering or a comparator that does not permit null elements.
Since:
1.6

descendingIterator

public Iterator<T> descendingIterator()
Returns an iterator over the elements of this set in descending order. This is equivalent to calling descendingSet().iterator().

Specified by:
descendingIterator in interface java.util.NavigableSet<T>
Returns:
an iterator over the elements in descending order.
Since:
1.6

descendingSet

public java.util.NavigableSet<T> descendingSet()
Returns a view of the set in reverse order. The descending set is backed by the original set, so that changes affect both sets. Any changes occurring to either set while an iteration is taking place (with the exception of a Iterator.remove() operation) result in undefined behaviour from the iteration. The ordering of the descending set is the same as for a set with a Comparator given by Collections.reverseOrder(), and calling descendingSet() on the descending set itself results in a view equivalent to the original set.

Specified by:
descendingSet in interface java.util.NavigableSet<T>
Returns:
a reverse order view of the set.
Since:
1.6

floor

public T floor(T e)
Returns the greatest or highest element in the set less than or equal to the given element, or null if there is no such element.

Specified by:
floor in interface java.util.NavigableSet<T>
Parameters:
e - the element relative to the returned element.
Returns:
the greatest element less than or equal to the given element, or null if there is no such element.
Throws:
ClassCastException - if the specified element can not be compared with those in the map.
NullPointerException - if the element is null and this set either uses natural ordering or a comparator that does not permit null elements.
Since:
1.6

higher

public T higher(T e)
Returns the least or lowest element in the set strictly greater than the given element, or null if there is no such element.

Specified by:
higher in interface java.util.NavigableSet<T>
Parameters:
e - the element relative to the returned element.
Returns:
the least element greater than the given element, or null if there is no such element.
Throws:
ClassCastException - if the specified element can not be compared with those in the map.
NullPointerException - if the element is null and this set either uses natural ordering or a comparator that does not permit null elements.
Since:
1.6

lower

public T lower(T e)
Returns the greatest or highest element in the set strictly less than the given element, or null if there is no such element.

Specified by:
lower in interface java.util.NavigableSet<T>
Parameters:
e - the element relative to the returned element.
Returns:
the greatest element less than the given element, or null if there is no such element.
Throws:
ClassCastException - if the specified element can not be compared with those in the map.
NullPointerException - if the element is null and this set either uses natural ordering or a comparator that does not permit null elements.
Since:
1.6

pollFirst

public T pollFirst()
Removes and returns the least or lowest element in the set, or null if the map is empty.

Specified by:
pollFirst in interface java.util.NavigableSet<T>
Returns:
the removed first element, or null if the map is empty.
Since:
1.6

pollLast

public T pollLast()
Removes and returns the greatest or highest element in the set, or null if the map is empty.

Specified by:
pollLast in interface java.util.NavigableSet<T>
Returns:
the removed last element, or null if the map is empty.
Since:
1.6