summaryrefslogtreecommitdiffstats
path: root/delaunay/ArraySet.java
diff options
context:
space:
mode:
Diffstat (limited to 'delaunay/ArraySet.java')
-rw-r--r--delaunay/ArraySet.java104
1 files changed, 104 insertions, 0 deletions
diff --git a/delaunay/ArraySet.java b/delaunay/ArraySet.java
new file mode 100644
index 0000000..b3fe357
--- /dev/null
+++ b/delaunay/ArraySet.java
@@ -0,0 +1,104 @@
+package delaunay;
+
+/*
+ * 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();
+ }
+
+}