package com.coding.basic; import java.util.Arrays; /** * ArrayList ʵ�� ��14С�� 296933284 * * @author Tonnyson * */ public class ArrayList<T> implements List<T> { private int size; private static final int DEFAULT_CAPACITY = 10; private Object[] elementData; public ArrayList() { elementData = new Object[DEFAULT_CAPACITY]; } @Override public boolean add(T element) { ensureCapacity(size + 1); elementData[size++] = element; return true; } @Override public void add(int index, T element) { rangCheckForAdd(index); ensureCapacity(size + 1); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = element; size++; } private void ensureCapacity(int minCapacity) { if (minCapacity - elementData.length > 0) { int newCapacity = elementData.length * 2; elementData = Arrays.copyOf(elementData, newCapacity); } } private void rangCheckForAdd(int index) { if (index > size || index < 0) throw new IndexOutOfBoundsException(); } @Override public T get(int index) { rangCheck(index); return (T) elementData[index]; } @Override public T remove(int index) { rangCheck(index); T element = (T) elementData[index]; System.arraycopy(elementData, index + 1, elementData, index,size - index - 1); elementData[size - 1] = null; size--; return element; } private void rangCheck(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException(); } @Override public int size() { return size; } @Override public boolean isEmpty() { return size == 0; } @Override public Iterator<T> iterator() { return new Iter(); } private class Iter implements Iterator<T> { int current; @Override public boolean hasNext() { return current != size; } @Override public T next() { int i = current; rangCheck(i); current++; return (T) elementData[i]; } } }