/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaclass; import java.util.Arrays; /** * * @author CJ */ public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; private final int defaultGrowSize = 100; // 每次增长 100 个元素 // private int curIterIndex = 0; // 用于记录 Iterator的索引 private void CheckAndGrowUp() { if (size+1 > elementData.length) { elementData = Arrays.copyOf(elementData, elementData.length + defaultGrowSize); } } // 添加一个方法,检测看,添加元素的话,是否需要增长,专门用于数组长度扩展的 public void add(Object o) { CheckAndGrowUp(); elementData[size] = o; size++; } @Override public void add(int index, Object o) { // 先探测是否添加数组大小 CheckAndGrowUp(); // 保留后半部分,然后 全部替换即可 Object[] tmpObjectArr = Arrays.copyOfRange(elementData, index, elementData.length); elementData[index] = o; for (int i = index+1; i < size+1; i++) { elementData[i] = tmpObjectArr[i-index-1]; } size++; } public Object get(int index) { // 应该是 不需要跑出 下标越界异常的,因为数组越界会自动抛出 return elementData[index]; } public Object remove(int index) { for (int i = index; i < size; i++) { elementData[i] = elementData[i + 1]; } elementData[size] = null; // 后续后面是 数值?那么就不能为null了,而是零? size--; return null; } @Override public int size() { return size; } // 覆盖toString方法,方便测试 @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("ArrayList: ["); for (int i = 0; i < size; i++) { sb.append(elementData[i]).append(", "); } // System.err.println(size); sb.delete(sb.length()-2,sb.length()).append("]"); return sb.toString(); } public Iterator iterator() { return new Iterator() { int curIterIndex = 0; @Override public boolean hasNext() { // TODO Auto-generated method stub return curIterIndex < size; } @Override public Object next() { // TODO Auto-generated method stub return elementData[curIterIndex++]; } }; } public static void main(String[] args) { ArrayList curArrList = new ArrayList(); for (int i = 0; i <= 101; i++) { curArrList.add(i); } System.err.println("Test add Arr"); System.err.println(curArrList); System.err.println("Test add in specific index"); curArrList.add(10, 1010); System.err.println(curArrList); System.err.println("Test remove"); curArrList.remove(10); System.err.println(curArrList); System.err.println("Test Iterator"); Iterator curIter = curArrList.iterator(); while(curIter.hasNext()){ System.err.println(curIter.next()); } } }