package BasicData;
import java.util.Arrays;
import java.util.NoSuchElementException;
/**
* ʵ�ֻ��������ݽṹ����ArrayList
*
* @author Ralf
*
* @param <T>
*/
public class MyArrayList<T> implements MyList<T> {
private static final int DEFAULT_CAPACITY = 10;
private static int msize;
private T[] elements;
public MyArrayList() {
msize = 0;
ensureCapacity(DEFAULT_CAPACITY);
}
@SuppressWarnings("unchecked")
private void ensureCapacity(int newCapacity) {
// TODO Auto-generated method stub
if (msize > newCapacity) {
return;
}
T[] oldElements = elements;
elements = (T[]) new Object[newCapacity];
for (int i = 0; i < size(); i++) {
elements[i] = oldElements[i];
}
}
public void trimSize(){
if (msize < elements.length) {
ensureCapacity(msize);
}
}
@Override
public boolean add(T t) {
// TODO Auto-generated method stub
if (elements.length == size()) {
ensureCapacity(2 * size() + 1);
}
elements[msize++] = t;
return true;
}
@Override
public void add(int index, T t) {
if (msize == elements.length) {
ensureCapacity(2 * msize + 1);
}
for (int i = size(); i >= index; i--) {
elements[i + 1] = elements[i];
}
elements[index] = t;
msize++;
}
@Override
public int size() {
// TODO Auto-generated method stub
return msize;
}
@Override
public T remove(int index) {
// TODO Auto-generated method stub
if (index < 0 || index > size()) {
throw new ArrayIndexOutOfBoundsException();
}
T old = elements[index];
for (int i = index; i < msize; i++) {
elements[i] = elements[i + 1];
}
elements[msize--] = null;
return old;
}
@Override
public boolean set(int index, T t) {
// TODO Auto-generated method stub
if (index < 0 || index > size()) {
throw new ArrayIndexOutOfBoundsException();
}
elements[index] = t;
return true;
}
@Override
public T get(int index) {
// TODO Auto-generated method stub
if (index < 0 || index > msize) {
throw new ArrayIndexOutOfBoundsException();
}
return elements[index];
}
@Override
public String toString() {
return Arrays.toString(elements);
}
public MyIterator<T> iterator() {
return new MyArrayListIterator();
}
private class MyArrayListIterator implements MyIterator<T> {
private int current = 0;// ��������ָ��
public boolean hasNext() {
// TODO Auto-generated method stub
return current < size();
}
public T Next() {
// TODO Auto-generated method stub
if (!hasNext()) {
throw new NoSuchElementException();
}
return elements[current++];
}
}
}