package jds.collection;
import java.util.Enumeration;
import jds.Bag;
import jds.Set;
/**
* SetAdapter set formed as a wrapper around existing collection;
* for use with book
* Classic Data Structures
* in Java
* by Timothy A Budd,
* published by Addison-Wesley, 2001.
*
* @author Timothy A. Budd
* @version 1.1 September 1999
* @see java.util.Enumeration
* @see java.io.Serializable
*/
public class SetAdapter implements Set {
// constructor
/**
* initialize set adapter by wrapping around an existing set
*
* @param s existing set to hold underlying data values
*/
public SetAdapter (Bag s) { data = s; }
// data field
private Bag data;
// the Collection interface
/**
* Determines whether the collection is empty
*
* @return true if the collection is empty
*/
public boolean isEmpty () { return data.isEmpty(); }
/**
* Determines number of elements in collection
*
* @return number of elements in collection as integer
*/
public int size () { return data.size(); }
/**
* Yields enumerator for collection
*
* @return an Enumeration
that will yield the elements of the collection
* @see java.util.Enumeration
*/
public Enumeration elements () { return data.elements(); }
// the Bag interface
/**
* add a new value to the collection
*
* @param value element to be inserted into collection
*/
public void addElement (Object val) // only add if not there
{ if (! data.containsElement(val)) data.addElement(val); }
/**
* see if collection contains value
*
* @param value element to be tested
* @return true if collection contains value
*/
public boolean containsElement (Object val) { return data.containsElement(val); }
/**
* find element that will test equal to value
*
* @param value element to be tested
* @return first value that is equals
to argument
* @exception java.util.NoSuchElementException no matching value
*/
public Object findElement (Object val) { return data.findElement(val); }
/**
* remove a new value from the collection
*
* @param value element to be removed from collection
* @exception java.util.NoSuchElementException no matching value
*/
public void removeElement (Object val) { data.removeElement(val); }
// the Set interface
/**
* form union with argument set
*
* @param aSet collection to be joined to current
*/
public void unionWith (Bag aSet) {
for (Enumeration e = aSet.elements(); e.hasMoreElements(); )
addElement(e.nextElement());
}
/**
* form intersection with argument set
*
* @param aSet collection to be intersected with current
*/
public void intersectWith (Bag aSet) {
Bag removedItems = new LinkedList();
// find values to be removed
Enumeration e;
for (e = elements(); e.hasMoreElements(); ) {
Object val = e.nextElement();
if (! aSet.containsElement(val))
removedItems.addElement(val);
}
// now remove them
for (e = removedItems.elements(); e.hasMoreElements(); )
removeElement(e.nextElement());
}
/**
* form difference from argument set
*
* @param aSet collection to be compared to current
*/
public void differenceWith (Bag aSet) {
Bag removedItems = new LinkedList();
// find values to be removed
Enumeration e;
for (e = elements(); e.hasMoreElements(); ) {
Object val = e.nextElement();
if (aSet.containsElement(val))
removedItems.addElement(val);
}
// now remove them
for (e = removedItems.elements(); e.hasMoreElements(); )
removeElement(e.nextElement());
}
/**
* see if current set is subset of argument set
*
* @param aSet collection to be tested against
* @return true if current collection is subset of argument collection
*/
public boolean subsetOf (Bag aSet) {
for (Enumeration e = elements(); e.hasMoreElements(); ) {
Object val = e.nextElement();
if (! aSet.containsElement(val))
return false;
}
return true;
}
}