// The list-based set, with ordering public class SetBB extends LBS implements OrderedSet { public SetBB() { super(); } // 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 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) { Element[] elems = other.getContents(); for (int i=0; i < elems.length; ++i) { insert((OrderableElement) elems[i]); } } } public void intersection(OrderedSet other) { if (this != other) { Element[] elems = getContents(); for (int i=0; i < elems.length; ++i) { if (!other.hasElement((OrderableElement) elems[i])) delete((OrderableElement) elems[i]); } } } public void difference(OrderedSet other) { if (this != other) { Element[] elems = other.getContents(); for (int i=0; i < elems.length; ++i) { delete((OrderableElement) elems[i]); } } } public String toString() { return "Set " + ls; } }