package com.coding.basic;
import java.util.Arrays;
public class MyArrayList implements MyList {
private final int GROW = 4;
private int size = 0;
private Object[] elementData = new Object[4];
public void add(Object o) {
if (size > elementData.length - 1) {
elementData = Arrays.copyOf(elementData, elementData.length + GROW);
elementData[size] = o;
} else {
elementData[size] = o;
}
size++;
}
public void add(int index, Object o) {
Object[] target = new Object[elementData.length - index];
for (int x = index, y = 0; x < elementData.length; x++, y++) {
target[y] = elementData[x];
}
elementData = Arrays.copyOf(elementData, elementData.length + 1);
size = index;
// elementData[index] = o;
elementData[size] = o;
size++;
for (int y = 0; y < target.length; y++) {
// add(target[y]);
elementData[size] = target[y];
size++;
}
}
public Object get(int index) {
return elementData[index];
}
public Object remove(int index) {
Object removeData = elementData[index];
elementData[index] = null;
Object[] target = Arrays.copyOfRange(elementData, index + 1, elementData.length);
for (int x = index, y = 0; y < target.length; y++, x++) {
elementData[x] = target[y];
}
size--;
return removeData;
}
public int size() {
return size;
}
public MyIteratorImpl iterator() {
return new MyIteratorImpl();
}
private class MyIteratorImpl implements MyIterator {
int index;
public boolean hasNext() {
return index != size;
}
public Object next() {
int i = index;
index = i + 1;
return elementData[i];
}
}
}