package aima.core.util;
import java.util.LinkedHashSet;
import java.util.Set;
/**
* Note: This code is based on - <a href=
* "http://download.oracle.com/javase/tutorial/collections/interfaces/set.html"
* >Java Tutorial: The Set Interface</a> <br>
*
* Using LinkedHashSet, even though slightly slower than HashSet, in order to
* ensure order is always respected (i.e. if called with TreeSet or
* LinkedHashSet implementations).
*
* @author Ciaran O'Reilly
* @author Ravi Mohan
*/
public class SetOps {
/**
*
* @param <T>
* @param s1
* @param s2
* @return the union of s1 and s2. (The union of two sets is the set
* containing all of the elements contained in either set.)
*/
public static <T> Set<T> union(Set<T> s1, Set<T> s2) {
Set<T> union = new LinkedHashSet<T>(s1);
union.addAll(s2);
return union;
}
/**
*
* @param <T>
* @param s1
* @param s2
* @return the intersection of s1 and s2. (The intersection of two sets is
* the set containing only the elements common to both sets.)
*/
public static <T> Set<T> intersection(Set<T> s1, Set<T> s2) {
Set<T> intersection = new LinkedHashSet<T>(s1);
intersection.retainAll(s2);
return intersection;
}
/**
*
* @param <T>
* @param s1
* @param s2
* @return the (asymmetric) set difference of s1 and s2. (For example, the
* set difference of s1 minus s2 is the set containing all of the
* elements found in s1 but not in s2.)
*/
public static <T> Set<T> difference(Set<T> s1, Set<T> s2) {
Set<T> difference = new LinkedHashSet<T>(s1);
difference.removeAll(s2);
return difference;
}
}