package com.coding.basic.impl; import com.coding.basic.Iterator; import com.coding.basic.List; /** * * @描述: ArrayList简单实现 * @作者:240094626 * @创建日期:2017-2-20 */ public class ArrayList implements List { /** * @comment:元素数组 */ private Object data[] = null; /** * @comment:数组元素个数 */ private int size = 0; /** * 无参构造函数,初始化容量为10的空列表 */ public ArrayList(){ this(10); } /** * @param length * 构造函数,初始化容量为length的空列表 */ public ArrayList(int length){ if(length < 0){ throw new IllegalArgumentException("初始容量参数非法:"+length); } data = new Object[length]; } /** * @createTime: 2017-2-21 下午1:32:28 * @param length * @return:void * @comment:列表结构扩展容量,每次增加原来的1/2容量 */ private void grow(int length){ int oldLength = data.length; if(length > oldLength){ Object oldData[] = data; int newLength = oldLength*3/2 + 1; if(newLength < length){ newLength = length; } data = new Object[newLength]; System.arraycopy(oldData, 0, data, 0, oldLength); } } /** * @createTime: 2017-2-21 下午1:32:05 * @param index * @return:void * @comment:检验下标参数是否超限 */ private void check(int index) { if( index >= size){ throw new IndexOutOfBoundsException("Index:"+index+",size:"+size); } } @Override public void add(Object o) { grow(size+1); data[size++]=o; } @Override public void add(int index, Object o) { if( index > size || index < 0){ throw new IndexOutOfBoundsException("Index:"+index+",size:"+size); } grow(size+1); System.arraycopy(data, index, data, index+1, size-index); data[index] = o; size++; } @Override public Object get(int index) { check(index); return data[index]; } @Override public Object remove(int index) { check(index); Object remove = data[index]; System.arraycopy(data, index+1, data, index, size-index); data[--size] = null; return remove; } @Override public int size() { return size; } @Override public String toString() { StringBuilder sb = new StringBuilder(); for(int i =0; i<size ;i++){ if(i > 0){ sb.append(","); } sb.append(data[i]); } return String.format("ArrayList {data=[%s], size=%d}", sb.toString(),size); } public Iterator iterator(){ return new ArrayListIterator(); } /** * @描述: 简单实现迭代器 * @作者:240094626 * @创建日期:2017-2-21 */ private class ArrayListIterator implements Iterator{ /** * @column:index * @comment:当前位置下标 */ private int index; /** * 无参构造,初始化迭代器的下标为0 */ public ArrayListIterator(){ index = 0; } @Override public boolean hasNext() { if(index < size){ return true; } return false; } @Override public Object next() { Object o = get(index++); return o; } } }