package com.leaning.code; import java.util.Arrays; public class ArrayList implements List { private int size; // ��¼�����е�Ԫ�ظ��� private Object[] elementsData; private int totalCount = 1; // ��¼���ϵĴ�С public ArrayList() { this.elementsData = new Object[totalCount]; } private void grow() { if (size >= totalCount) { // �������� int oldCapacity = size; int newCapacity = oldCapacity + oldCapacity << 1; totalCount = newCapacity; elementsData = Arrays.copyOf(elementsData, newCapacity); } } @Override public void add(Object o) { if (totalCount > size) { elementsData[size++] = o; } else { grow(); elementsData[size++] = o; } } @Override public void add(int index, Object o) { if (index < size) { if (totalCount <= size + 1) { grow(); } System.arraycopy(elementsData, index, elementsData, index + 1, size - index); elementsData[index] = 0; } else { throw new RuntimeException("�����±�Խ��"); } size++; } @Override public Object get(int index) { if (index < size) return elementsData[index]; else throw new RuntimeException("�����±�Խ��"); } @Override public Object remove(int index) { if (index >= size || index < 0) { throw new RuntimeException("�����±�Խ��"); } Object o = elementsData[index]; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementsData, index + 1, elementsData, index, numMoved); elementsData[--size] = null; return o; } @Override public int size() { return size; } @Override public String toString() { return "ArrayList [elementsData=" + Arrays.toString(elementsData) + "]"; } }