package com.coding.basic; import java.util.Arrays; import java.util.LinkedList; /** * @author hugaoqing * created on 2017-3-8 */ public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[3]; /* * 添加元素 * */ public void add(Object o){ /*if(elementData.length == size){ Object[] buffer = new Object[size+15]; System.arraycopy(elementData, 0, buffer, 0, size); elementData = buffer; elementData[size] = o; size++; }else { elementData[size] = o; size++; }*/ add(size, o); } /* * * 指定位置添加元素 */ public void add(int index, Object o){ if(index <0 || index > size){ throw new IndexOutOfBoundsException(); } if(size+1<elementData.length){ Object [] newArr = new Object[size-index+1]; newArr[0] = o; System.arraycopy(elementData, index, newArr, 1, size-index); System.arraycopy(newArr, 0, elementData, index, size-index+1); size++; }else{ Object[] buffer = new Object[(size*3)/2+1]; System.arraycopy(elementData, 0, buffer, 0, size); elementData = buffer; Object [] newArr = new Object[size-index+1]; newArr[0] = o; System.arraycopy(elementData, index, newArr, 1, size-index); System.arraycopy(newArr, 0, elementData, index, size-index+1); size++; } } public Object get(int index){ if(index<0||index>=size){ throw new IndexOutOfBoundsException(); } return elementData[index]; } public Object remove(int index){ if(index<0||index>=size){ throw new IndexOutOfBoundsException(); } Object out = elementData[index]; Object[] temp = new Object[size-index-1]; System.arraycopy(elementData, index+1, temp, 0, size-index-1); System.arraycopy(temp, 0, elementData,index, size-index-1); //将移除的元素的指针去掉,避免内存泄漏 elementData[size-1] = null; size--; return out; } public int size(){ return this.size; } @Override public String toString() { Object[] objs = new Object[size]; System.arraycopy(elementData, 0,objs , 0, size); return Arrays.toString(objs); } public Iterator iterator(){ return new Iterator() { int cursor = 0; public Object next() throws Exception { cursor++; return get(cursor-1); } public boolean hasNext() { return this.cursor<size(); } }; } public static void main(String[] args) throws Exception { List list = new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(3,4); System.out.println(list); list.add(0,0); System.out.println(list); Iterator itr = list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } }