package com.coding.basic;
public class ArrayList implements List {
private int size = 0;
private static final int DEFAULT_SIZE = 100 ;
private Object[] elements = new Object[DEFAULT_SIZE];
private int capacity = size;
public void add(Object o) {
addSize(size);
this.elements[size] = o;
this.size++;
}
public void add(int index, Object o) {
checkIndex(index);
for (int i = index; i < elements.length; i++) {
if (i + 1 < elements.length) {
elements[i] = elements[i + 1];
}
}
size--;
}
public Object get(int index) {
checkIndex(index);
return this.elements[index];
}
public Object remove(int index) {
checkIndex(index);
Object o = elements[index];;
for (int i = index; i < elements.length; i++) {
if (i + 1 < elements.length) {
elements[i] = elements[i + 1];
}
}
size--;
return o;
}
public int size() {
return this.size;
}
public Iterator iterator() {
return new IteratorImpl();
}
/**
* �ж��Ƿ�Խ��
*/
private void checkIndex(int index) {
if (index > size || index < 0) {
throw new RuntimeException("Խ��");
}
}
/**
* ȷ����ǰ�����������������ӡ�
*/
private void addSize(int index) {
if (index > size && size< elements.length-1) {
this.capacity = this.size + this.DEFAULT_SIZE;
Object[] newElemets = new Object[this.capacity];
System.arraycopy(elements,0,newElemets,0,elements.length);
this.elements = newElemets;
}
}
class IteratorImpl implements Iterator {
private int curi = 0;
@Override
public boolean hasNext() {
boolean bn = false;
if (curi < size) {
bn = true;
}
return bn;
}
@Override
public Object next() {
if (!hasNext()) {
return null;
}
curi++;
return elements[curi];
}
}
}