package com.coding.basic; import java.util.Arrays; public class ArrayList implements List { private int size = 0; //每次增加的长度 private Integer addArrayLength = 10; //初始 数组长度 private Object[] elementData = new Object[10]; public void add(Object o){ if(size < elementData.length) { elementData[size]=o; }else{ //扩容数组 grow(); elementData[size] = 0; } size++; } public void add(int index, Object o){ if(index>size) { throw new RuntimeException("ArrayIndexOutOfBoundsException"); } //截取索引开始到原数组结尾 组成一个新的数组 Object [] tempObjs = Arrays.copyOfRange(elementData,index,elementData.length); //覆盖原有索引位置的对象 elementData[index] = o; //数组扩容 elementData = Arrays.copyOf(elementData,elementData.length+1); //将临时生成的数组合并回原数组 System.arraycopy(tempObjs,0,elementData,index+1,tempObjs.length); size++; } public Object get(int index){ return elementData[index]; } public Object remove(int index){ if(index>size) { throw new RuntimeException("ArrayIndexOutOfBoundsException"); } Object o = elementData[index]; //截取索引开始到原数组结尾 组成一个新的数组 Object [] tempObjs = Arrays.copyOfRange(elementData,index+1,elementData.length); elementData = Arrays.copyOf(elementData,elementData.length-1); //将临时生成的数组合并回原数组 System.arraycopy(tempObjs,0,elementData,index,tempObjs.length); size--; return o; } public int size(){ return this.size; } public Iterator iterator(){ ArratListIterator arratListIterator = new ArratListIterator(this); return arratListIterator; } private void grow(){ elementData = Arrays.copyOf(elementData,elementData.length+addArrayLength); } class ArratListIterator implements Iterator{ ArrayList arrayList = new ArrayList(); int index = 0; ArratListIterator(ArrayList arrayList){ this.arrayList = arrayList; index = arrayList.size; } @Override public boolean hasNext() { if(index == 0) { return false; } return true; } @Override public Object next() { return this.arrayList.get(--index); } } }