package edu.stanford.nlp.util;
import java.io.Serializable;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* An array-backed set.
* @author Roger Levy (rog@stanford.edu)
*/
public class ArraySet<E> extends AbstractSet<E> implements Serializable {
private final List<E> backer;
/**
* Constructs an ArraySet.
*/
public ArraySet() {
this(10);
}
/**
* Constructs an ArraySet, using the given list as the backing collection.
* Note that this is not a copy constructor!
*/
public ArraySet(List<E> source) {
this.backer = source;
}
/**
* Constructs an ArraySet with specified initial size of backing array.
* @param initialSize initial size of the backing array.
*/
public ArraySet(int initialSize) {
backer = new ArrayList<>(initialSize);
}
/**
* Constructs an ArraySet with the specified elements.
* @param elements the elements to be put in the set.
*/
@SafeVarargs
public ArraySet(E ... elements) {
this(elements.length);
for (E element : elements) {
add(element);
}
}
/**
* Returns iterator over elements of the set.
*/
@Override
public Iterator<E> iterator() {
return backer.iterator();
}
/**
* Adds element to set.
* @param e the element to be added.
* @return <code>false</code> if the set already contained (vis. <code>.equals()</code>) the specified element; <code>true</code> otherwise.
*/
@Override
public boolean add(E e) {
if(backer.contains(e))
return false;
else
return backer.add(e);
}
/**
* Returns size of set.
* @return number of elements in set.
*/
@Override
public int size() {
return backer.size();
}
private static final long serialVersionUID = 1L;
}