package abstractions; import java.util.Iterator; public class IntSet { private int elems[]; private int size; private static int initialSize=2; public IntSet() { elems=new int[initialSize]; size=0; } //This exposes rep. elems //public IntSet(int a[]) //{ // elems = a; // size = a.length; //} /** * This one avoid rep. exposure. But an iterator is better. * @return */ public int[] getElements() { int a[] = new int[size]; System.arraycopy(elems,0, a, 0, size); return a; } /** * * @return the number integers in set */ public int size() { return size; } /** * * @param x the integer to be checked * @return true if x is in this set */ public boolean isIn(int x) { return getIndex(x)>-1; } /** * * @param x the integer to be inserted * EFFECTS: if x is in the set, nothing happens; * otherwise, x is added into this set. */ public void insert(int x) { int xIndex = getIndex(x); if (size==0){ //assert xIndex==-1 } if (xIndex<0) { resize(); elems[size++]=x; } } private int getIndex(int x) { for (int i=0; i elems[i]!=elems[j] * @return */ public boolean repOk() { if (null==elems) { return false; } for (int i=0; i0) { tmp += elems[size-1]; } tmp+="}"; return tmp; } /** * EFFECTS: returns an iterator for IntSet. * REQUIRES: When one iterator is in use, do not call remove on another. */ public Iterator iterator() { // return new IntSetIterator(this); return new IntSetIterator1(); } private static class IntSetIterator implements Iterator { private IntSet aSet; private int curr=0; public IntSetIterator(IntSet aSet) { this.aSet = aSet; } public boolean hasNext() { return (curr