# Java: Set<E> interface

Only one. Sets are collections that allow only one object with a given value in them. The java.util.Set<E> interface is a subinterface of Collection<E>. There are two very useful concrete classes that implement the Set<E> interface:

- `java.util.HashSet<E>` is implemented with a hash table. Access time is O(1). Entries are unsorted.
- `java.util.TreeSet<E>` is implemented as a balanced binary tree. Access time is O(log N). Entries are sorted.

## Set<E> interface has all Collection<E> interface methods

Sets implement all Collection methods.

## HashSet<E> class constructors

HashSet<E> is implemented with an underlying HashMap. In addition to implemented the Set interface methods, HashSet has the following constructors.

Result | Constructor | Description
--- | --- | ---
`hset =` | `new HashSet<E>()` | Creates a new HashSet with default initial capacity 16 and load factor 0.75.
`hset =` | `new HashSet<E>(initialCapacity)` | Creates a new HashSet with the specified initial int capacity.
`hset =` | `new HashSet<E>(initialCapacity, loadFactor)` | Creates a new HashSet with the specified capacity which will not exceed a specified (float) load factor.
`hset =` | `new HashSet<E>(coll)` | Creates a new HashSet with elements from the Collection coll

## SortedSet interface methods

The SortedSet interface is used by TreeSet and adds additional methods to reflect that a TreeSet is sorted.

    SortedSet<E> sset;

Result | Method | Description
--- | --- | ---
`comp =` | `sset.comparator()` | Returns Comparator used to compare elements. null if natural ordering used (eg, String).
`obj =` | `sset.firstKey()` | First element (in sorted order).
`obj =` | `sset.lastKey()` | Last element (in sorted order).
`sset =` | `sset.headMap(obj)` | Returns SortedSet of all elements less than obj.
`sset =` | `sset.tailMap(obj)` | Returns SortedSet of all elements greater than or equal to obj.
`sset =` | `sset.subMap(from, to)` | Returns SortedSet of all elements greater than or equal to from and less than to.

## TreeSet<E> class constructors

TreeSet implements the Set and SortedSet interface methods. TreeSet is implemented with an underlying TreeMap (balanced binary tree). If the element type has a natural order (eg, String) elements will be ordered by that, but often you will supply a Comparator object that tells how two elements compare. It has the following constructors.

Result | Constructor | Description
--- | --- | ---
`tset =` | `new TreeSet<E>()` | Creates new TreeSet. Elements sorted by natural order.
`tset =` | `new TreeSet<E>(comp)` | Creates new TreeSet using Comparator comp to sort elements.
`tset =` | `new TreeSet<E>(coll)` | Creates new TreeSet from Collection coll using natural ordering.
`tset =` | `new TreeSet<E>(sset)` | Creates new TreeSet from SortedSet smp using element ordering from sset.