import java.util.*; public class MySet extends AbstractSet { private Object[] elements; private int size; private final int INITIAL_CAPACITY = 10; /** * Default constructor */ public MySet() { elements = new Object[INITIAL_CAPACITY]; size = 0; } // end constructor /** * Constructor from a Collection */ public MySet(Collection c) { elements = new Object[c.size()]; size = 0; Iterator cItr = c.iterator(); while( cItr.hasNext() ) { add(cItr.next()); } // end while } // end constructor /** * Ensures that this set contains the specified element * @returns true if this set is modified */ public boolean add(Object x) { if( contains(x) ) return false; if( size == elements.length) resize(); elements[size++] = x; return true; } // end add /** * Returns the number of elemenst in this set * @return the number of elements in this set */ public int size() { return size; } // end size /** * Returns an iterator over the elements in this set * @return an Iterator over the elemenst in this set */ public Iterator iterator() { return new MyIterator(); } private class MyIterator implements Iterator { private int current; private boolean removeOK; public MyIterator() { current = 0; removeOK = false; } // end constructor public boolean hasNext() { return current < size; }// end hasNext public Object next() { if( !hasNext() ) throw new NoSuchElementException(); removeOK = true; return elements[current++]; } // end next public void remove() { if( !removeOK ) throw new IllegalStateException(); for( int i = current; i < size; i++ ) { elements[i-1] = elements[i]; } // end for size--; current--; removeOK = false; } // end remove } // end MyIterator private void resize() { Object[] save = elements; elements = new Object[2*save.length+1]; for( int i = 0; i < size; i++ ) { elements[i] = save[i]; } // end for } // end resize } // end MySet