Collections Data Structure Java

/* SimpleSet Copyright (C) 1998-2002 Jochen Hoenicke.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; see the file COPYING.LESSER.  If not, write to
 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * $Id: SimpleSet.java.in,v 1.1.2.1 2002/05/28 17:34:24 hoenicke Exp $
 */
import java.util.AbstractSet;
import java.util.Iterator;
public class SimpleSet extends AbstractSet implements Cloneable
{
    Object[] elementObjects;
    int count = 0;
    public SimpleSet() {
  this(2);
    }
    public SimpleSet(int initialSize) {
  elementObjects = new Object[initialSize];
    }
    public int size() {
  return count;
    }
    public boolean add(Object element) {
  if (element == null)
      throw new NullPointerException();
  for (int i=0; i< count; i++) {
      if (element.equals(elementObjects[i]))
    return false;
  }
  
  if (count == elementObjects.length) {
            Object[] newArray = new Object[(count+1)*3/2];
            System.arraycopy(elementObjects,0,newArray,0,count);
            elementObjects = newArray;
        }
        elementObjects[count++] = element;
  return true;
    }
  
    public Object clone() {
        try {
            SimpleSet other = (SimpleSet) super.clone();
      other.elementObjects = (Object[]) elementObjects.clone();
            return other;
        } catch (CloneNotSupportedException ex) {
           
        }
    }
    public Iterator iterator() {
  return new Iterator() {
      int pos = 0;
      public boolean hasNext() {
    return pos < count;
      }
      
      public Object next() {
    return elementObjects[pos++];
      }
    
      public void remove() {
    if (pos < count)
        System.arraycopy(elementObjects, pos, 
             elementObjects, pos-1, count - pos);
    count--;
    pos--;
      }
  };
    }
}