# Set-theoretical Operations

In Mathematics, two sets can be “added” together. The union of $A$ and $B$, denoted by $A \cup B$, is the set of all elements that are members of either $A$ or $B$.

We can include this operation in the Set ADT:

/**
* Constructing a new set with elements that are in this set or
* in the other set.
*
* @param other set.
* @return all elements that are in this set or the other set.
*/
Set<T> union(Set<T> other);

The intersection of $A$ and $B$, denoted by $A \cap B$, is the set of all elements that are members of both $A$ and $B$.

/**
* Constructing a new set with elements that are in this set and
* in the other set.
*
* @param other set.
* @return the elements this set and other set have in common.
*/
Set<T> intersect(Set<T> other);

The set difference of $A$ and $B$, denoted by $A - B$, is the set of all elements that are in $A$ but not in $B$.

/**
* Constructing a new set with elements that are in this set but not
* in the other set.
*
* @param other set.
* @return the elements in this set but not in the other set.
*/
Set<T> subtract(Set<T> other);

These operations can be defined for OrderedSet ADT as well:

OrderedSet<T> union(OrderedSet<T> other);
OrderedSet<T> intersect(OrderedSet<T> other);
OrderedSet<T> subtract(OrderedSet<T> other);  

We leave it to you as a challenge> exercise to implement these operations efficiently.