package com.datastructure.array; import java.util.Arrays; import com.datastructure.basic.Iterator; import com.datastructure.basic.List; /** * * arrayList集合-数组 * * @ClassName ArrayList * @author msh * @date 2017年2月21日 下午3:49:24 */ public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[0]; /** * * 向最后插入元素 * * @Method add 添加 * @param o 元素 * @see com.datastructure.basic.List#add(java.lang.Object) */ public void add(Object o){ ensureCapacity(size + 1); elementData[size] = o; size++; } /** * * 向指定位置插入元素 * * @Method add 添加 * @param index 下标 * @param o 元素 * @see com.datastructure.basic.List#add(int, java.lang.Object) */ public void add(int index, Object o){ validate(index); ensureCapacity(size + 1); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } /** * * 取得元素 * * @Method get 取得 * @param index 下标 * @return * @see com.datastructure.basic.List#get(int) */ public Object get(int index){ validate(index); return elementData[index]; } /** * * 删除元素 * * @Method remove 删除 * @param index 下标 * @return 删除的元素 * @see com.datastructure.basic.List#remove(int) */ public Object remove(int index){ validate(index); Object oldValue = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); elementData[size] = null; size--; return oldValue; } /** * * 取得集合大小 * * @Method size 集合大小 * @return 集合大小 * @see com.datastructure.basic.List#size() */ public int size(){ return this.size; } /** * 迭代 * @return */ public Iterator iterator(){ return new ArrayListIterator(); } /** * 判断是否需要数组增长 * @param minCapacity */ private void ensureCapacity(int minCapacity) { if(minCapacity>elementData.length){ int newCapacity = Math.max(minCapacity, elementData.length*2); Object[] newElementData = new Object[newCapacity]; System.arraycopy(elementData, 0, newElementData, 0, elementData.length); } } /** * * 验证 * * @MethodName validate 下标 * @author msh * @date 2017年2月21日 下午3:54:21 * @param index */ private void validate(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } /** * * @author Administrator * */ private class ArrayListIterator implements Iterator{ private int position; private ArrayList list; @Override public boolean hasNext() { return position < list.size(); } @Override public Object next() { if (hasNext()) { return list.get(position++); } return null; } } }