package com.coding.basic;
public class ArrayList implements List, Iterator {
private int size;
private Object[] data;
public ArrayList() {
data = new Object[10];
}
@Override
public void add(Object o) {
size = size();
if(data.length <= size){
grow();
}
data[size] = o;
size++;
}
/* (non-Javadoc)
* @see dataStructure.List#add(java.lang.Object, int)
* 在第index元素前插入元素
*/
@Override
public void add(int index, Object o){
if (index >= size()){
return;
}
size = size();
if(data.length <= size){
grow();
}
for(int i = size , len = size - index; i < len; i -- ){
data[i] = data[i -1];
}
data[index] = o;
size++;
}
@Override
public Object get(int index) {
return data[index];
}
@Override
public int size() {
return size;
}
@Override
public Object remove(int index) {
if (index >= size()){
return null;
}else{
Object o = data[index];
for(int i = index; i < size; i ++){
data[i] = data[i + 1];
}
data[size] = null;
size--;
return o;
}
}
private void grow(){
size = size();
int length = 0;
if(size < 10000){
length = size * 2;
}else{
length = (int)(size * 1.5);
}
size = length;
Object[] temData = new Object[length];
for(int i = 0, j = data.length; i < j; i ++){
temData[i] = data[i];
}
data = temData;
}
private int index = 0;
@Override
public boolean hasNext() {
return index < size;
}
@Override
public Object next() {
index++;
return data[index - 1];
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
for(int i = 0; i < size; i++){
sb.append(data[i].toString() + ",");
}
sb.append("]");
return sb.toString();
}
}