package PaulChew;
/*
* Copyright (c) 2007 by L. Paul Chew.
*
* Permission is hereby granted, without written agreement and without
* license or royalty fees, to use, copy, modify, and distribute this
* software and its documentation for any purpose, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* An ArrayList implementation of Set. An ArraySet is good for small sets; it
* has less overhead than a HashSet or a TreeSet.
*
* @author Paul Chew
*
* Created December 2007. For use with Voronoi/Delaunay applet.
*
*/
public class ArraySet<E> extends AbstractSet<E> {
private ArrayList<E> items; // Items of the set
/**
* Create an empty set (default initial capacity is 3).
*/
public ArraySet () {
this(3);
}
/**
* Create an empty set with the specified initial capacity.
* @param initialCapacity the initial capacity
*/
public ArraySet (int initialCapacity) {
items = new ArrayList<E>(initialCapacity);
}
/**
* Create a set containing the items of the collection. Any duplicate
* items are discarded.
* @param collection the source for the items of the small set
*/
public ArraySet (Collection<? extends E> collection) {
items = new ArrayList<E>(collection.size());
for (E item: collection)
if (!items.contains(item)) items.add(item);
}
/**
* Get the item at the specified index.
* @param index where the item is located in the ListSet
* @return the item at the specified index
* @throws IndexOutOfBoundsException if the index is out of bounds
*/
public E get (int index) throws IndexOutOfBoundsException {
return items.get(index);
}
/**
* True iff any member of the collection is also in the ArraySet.
* @param collection the Collection to check
* @return true iff any member of collection appears in this ArraySet
*/
public boolean containsAny (Collection<?> collection) {
for (Object item: collection)
if (this.contains(item)) return true;
return false;
}
@Override
public boolean add(E item) {
if (items.contains(item)) return false;
return items.add(item);
}
@Override
public Iterator<E> iterator() {
return items.iterator();
}
@Override
public int size() {
return items.size();
}
}