package com.github.lhpmatlab.coding2017.basic;
/**
* Created by andy on 2017/2/18.
*/
public class MyArrayList<T> {
private Object[] initialArray = {};
private Object[] dataArray;
private int initSize = 10;
private int arraySize;
public MyArrayList() {
dataArray = initialArray;
}
public MyArrayList(int init) {
dataArray = new Object[init];
}
public void ensureCapacity(int newCapacity) {
if (newCapacity < arraySize)
return;
Object[] old = dataArray;
dataArray = new Object[newCapacity];
for (int i = 0; i < size(); i++) {
dataArray[i] = old[i];
}
}
public void add(T element) {
add(size(), element);
}
public void add(int index, T element) {
if (size() == dataArray.length) {
ensureCapacity(size()*2 + 1);
}
for(int i=arraySize;i>index;i--) {
dataArray[i] = dataArray[i - 1];
}
dataArray[index] = element;
arraySize++;
}
public T delete(int index) {
if (index < 0 || index > arraySize) {
throw new ArrayIndexOutOfBoundsException();
}
T removeElement = (T)dataArray[index];
for (int i = index; i < size() -1; i++) {
dataArray[i] = dataArray[i + 1];
}
arraySize--;
return removeElement;
}
public T get(int index) {
if (index < 0 || index > arraySize) {
throw new ArrayIndexOutOfBoundsException();
}
return (T)dataArray[index];
}
public T set(int index, T newElement) {
if (index < 0 || index > arraySize) {
throw new ArrayIndexOutOfBoundsException();
}
T oldElement = (T) dataArray[index];
dataArray[index] = newElement;
return oldElement;
}
public int size() {
return arraySize;
}
public boolean isEmpty() {
return size() == 0;
}
}