package basic; /** * * * @author lvxg * */ public class MyArrayList { private Object[] element; private int size; private static final Object[] EMPTY = new Object[10]; public MyArrayList() { this.element = EMPTY; } public boolean add(Object o) { if (size < element.length) { element[size] = o; size++; } else { //数组扩容 grow(); element[size] = o; size++; } return true; } //根据索引添加 public boolean add(int index, Object o) { rangeCheckForAdd(index); if (size < element.length + 1) { Object[] e = new Object[element.length+1]; System.arraycopy(element, 0, e, 0, index); e[index] = o; System.arraycopy(element, index, e, index + 1, element.length-index); element = e; size++; } return true; } public Object get(int index) { rangeCheck(index); return element[index]; } public Object remove(int index) { rangeCheck(index); Object oldValue = element[index]; int numMoved = size - index-1; if(numMoved>0){ System.arraycopy(element, index+1, element, index, numMoved); } element[--size] =null; return oldValue; } public int size() { return size; } private void rangeCheck(int index) { if (index >= size) throw new IndexOutOfBoundsException(); } private void rangeCheckForAdd(int index) { if (index > size || index < 0) { throw new IndexOutOfBoundsException(); } } //数组扩容方法 private void grow() { Object[] e = new Object[size * 2]; System.arraycopy(element, 0, e, 0, element.length); element = e; } public static void main(String[] args) { MyArrayList m = new MyArrayList(); for (int i = 0; i < 10; i++) { m.add(i); } m.add(2, "123"); } }