I'm having trouble implementing a few methods in a class I have to make. The class deals with the operations of sets. Like union of two sets and intersection of two sets. Yes I know there is already a Set class, but I am having to implement my own. I seem to be having trouble with the symDiff (Symmetric Difference) , diff (Difference), and others.

package setApp; import java.util.*; public class Set { private ArrayList<String> elements; /** * creates an empty set */ public Set() { elements = null; } /** * creates a set using the elements of the ArrayList s. * @param s the ArrayList whose elements are used to * create this set. * @throws IllegalArgumentException if s contains duplicity. */ public Set(ArrayList<String> s) { int i; elements = new ArrayList<String>(); for(i=0; i<s.size(); i++) { if (elements.contains(s.get(i))) throw new IllegalArgumentException("Set(ArrayList<String>):duplicity not allowed in sets"); elements.add(s.get(i)); } } /** * creates a set using the elements of the array s. * @param s the array whose elements are used to * create this set. * @throws IllegalArgumentException if s contains duplicity. */ public Set(String[] s) { int i; elements = new ArrayList<String>(); for(i=0; i<s.length; i++) { if (elements.contains(s[i])) throw new IllegalArgumentException("Set(String[]):duplicity not allowed in sets"); elements.add(s[i]); } } /** * determines whether a set contains the specified element * @param elt an element * @return true if elt is an element of this set; otherwise, false */ public boolean isElement(String elt) { return elements.contains(elt); } /** * determines the size of this set. * @return the size of this set. */ public int cardinality() { return elements.size(); } /** * computes the intersection of this set and the * specified set. * @param s a set * @return a set representing the intersection of this set * and s. */ public Set intersect(Set s) { int i; ArrayList<String> result = new ArrayList<String>(); for (i=0;i<s.cardinality();i++) if (this.isElement(s.elements.get(i))) result.add(s.elements.get(i)); return new Set(result); } /** * computes the union of this set and the specified set. * @param s a sets * @return a set representing the union of this set * and s. */ public Set union(Set s) { int i; ArrayList<String> result = new ArrayList<String>(); for (i=0; i<s.cardinality(); i++) { if (elements.contains(i)) result.add(s.elements.get(i)); } return new Set(result); } /** * computes the difference between this set and the * specified set. * @param s a set * @return a set representing the difference between * this set and s. */ public Set diff(Set s) { } /** * computes the symmetric difference between this set * and the specified set. * @param s a set * @return a set representing the symmetrix difference * between this set and s. */ public Set symDiff(Set s) { //implement this method } /** * computes the Cartesian product for this set * and the specified set. * @param s a set * @return a set representing the Cartesian product * of this set and s. */ public Set xProduct(Set s) { //implement this method } /** * determines whether a set is empty * @return true if this set is empty; otherwise, false */ public boolean isEmpty() { return elements.isEmpty(); } /** * determines whether this set is equal to the specified * set. * @param s a set * @return true if this set is equal to s; otherwise, false */ public boolean equals(Set s) { //implement this method } /** * determines whether this set is a subset of the specified set. * @param s a set * @return true if this set is a subset of s; otherwise, false */ public boolean subset(Set s) { //implement this method } /** * determines whether this set is a proper subset of the specified set. * @param s a set * @return true if this set is a proper subset of s; otherwise, false */ public boolean properSubset(Set s) { //implement this method } /** * returns a string {x1,x2,...,xn} representing this set, * where x1,x2,...,xn are elements of this set. * @return a string representation of this set formatted * as specified. */ public String toString() { //implement this method } }