,
public class DynArray {
private int size;
private int maxSize;
private Object[] array;
public DynArray(int sz) throws IndexOutOfBoundsException {
this(sz, sz, null);
}
public DynArray(int sz, int maxSz) throws IndexOutOfBoundsException {
this(sz, maxSz, null);
}
public DynArray(int sz, int maxSz, Object[] iniArray) throws IndexOutOfBoundsException {
if((size = sz) < 0) {
throw new IndexOutOfBoundsException("Negative size: " + sz);
}
maxSize = (maxSz < sz ? sz : maxSz);
array = new Object[maxSize];
if(iniArray != null) {
for(int i = 0; i < size && i < iniArray.length; i++) {
array[i] = iniArray[i];
}
}
}
public Object elementAt(int i) throws IndexOutOfBoundsException {
if (i < 0 || i >= size) {
throw new IndexOutOfBoundsException("Index" + i +
" out of range [0," + (size - 1) + "]");
}
return array[i];
}
public void resize(int delta) {
if (delta > 0) enlarge(delta);
else if (delta < 0) shrink(-delta);
}
public void enlarge(int delta) {
if((size += delta) > maxSize) {
maxSize = size;
Object[] newArray = new Object[maxSize];
for(int i =0; i < size - delta; i++)
newArray[i] = array[i];
array = newArray;
}
}
public void shrink(int delta) {
size = (delta > size ? 0 : size - delta);
}
public void add(Object e) {
resize(1);
array[size-1] = e;
}
public void remove(Object e) {
int j;
for(j = 0; j < size; j++) {
if(e.equals(array[j])) {
break;
}
}
if(j == size) {
return false;
} else {
for(int k = j; k < size; k++)
array[k] = array[k + 1];
resize(-1);
return true;
}
}
}