Java tutorial
/* * Copyright 2003-2007 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.AbstractList; import java.util.Collection; import java.util.List; public class FastArray implements Cloneable { private Object[] data; public int size; public static final FastArray EMPTY_LIST = new FastArray(0); public FastArray(int initialCapacity) { data = new Object[initialCapacity]; } public FastArray() { this(8); } public FastArray(Collection c) { this(c.toArray()); } public FastArray(Object[] objects) { data = objects; size = objects.length; } public Object get(int index) { return data[index]; } public void add(Object o) { if (size == data.length) { Object[] newData = new Object[size == 0 ? 8 : size * 2]; System.arraycopy(data, 0, newData, 0, size); data = newData; } data[size++] = o; } public void set(int index, Object o) { data[index] = o; } public int size() { return size; } public void clear() { data = new Object[data.length]; size = 0; } public void addAll(FastArray newData) { addAll(newData.data, newData.size); } public void addAll(Object[] newData, int size) { if (size == 0) return; final int newSize = this.size + size; if (newSize > data.length) { Object nd[] = new Object[newSize]; System.arraycopy(data, 0, nd, 0, this.size); data = nd; } System.arraycopy(newData, 0, data, this.size, size); this.size = newSize; } public FastArray copy() { final Object[] newData = new Object[size]; System.arraycopy(data, 0, newData, 0, size); return new FastArray(newData); } public boolean isEmpty() { return size == 0; } public void addAll(List coll) { final Object[] newData = coll.toArray(); addAll(newData, newData.length); } public void remove(int index) { int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(data, index + 1, data, index, numMoved); data[--size] = null; } public List toList() { return new AbstractList() { public Object get(int index) { return FastArray.this.get(index); } public int size() { return size; } }; } public Object[] getArray() { return data; } public String toString() { if (size() == 0) return "[]"; return toList().toString(); } }