// The list-based set, with ordering public class SetB implements OrderedSet { private ListOfObjects ls; public SetB() { ls = new ListOfObjects(); } public int sizeOf() { int ans = 0; ls.reset(); while (!ls.atEnd()) { ++ans; ls.next(); } return ans; } // positions the list at where element x should be // returns null if it's not htere. private ListOfObjects locate(OrderableElement x) { ls.reset(); while (!ls.atEnd()) { OrderableElement curr = (OrderableElement) ls.getItem(); if (curr.elEquals(x))return ls; if (curr.elGreaterThan(x)) return null; ls.next(); } return null; } public Element find(OrderableElement x) { if (locate(x) == null) return null; else return (Element)ls.getItem(); } public boolean isEmpty() { return sizeOf() == 0; } public void insert(OrderableElement x) { if (locate(x) == null) ls.insert(x); } public void delete(OrderableElement x) { if (locate(x) != null) ls.delete(); } public boolean hasElement(OrderableElement x) { return locate(x) != null; } public void union(OrderedSet other) { if (this != other) { OrderableElement[] elems = other.getContents(); for (int i=0; i < elems.length; ++i) { insert(elems[i]); } } } public void intersection(OrderedSet other) { if (this != other) { OrderableElement[] elems = getContents(); for (int i=0; i < elems.length; ++i) { if (!other.hasElement(elems[i])) delete(elems[i]); } } } public void difference(OrderedSet other) { if (this != other) { OrderableElement[] elems = other.getContents(); for (int i=0; i < elems.length; ++i) { delete(elems[i]); } } } public OrderableElement[] getContents() { OrderableElement[] ans = new OrderableElement[sizeOf()]; int loc = 0; ls.reset(); while (!ls.atEnd()) { ans[loc++] = (OrderableElement) ls.getItem(); ls.next(); } return ans; } public String toString() { return "Set " + ls; } }