package com.coding.basic; import java.util.Arrays; import java.util.LinkedList; /** * @author hugaoqing * created on 2017-3-8 */ public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; /* * ��size����������lengthʱ����buffer�������ԭ���� * */ public void add(Object o){ if(elementData.length == size){ Object[] buffer = new Object[size+15]; System.arraycopy(elementData, 0, buffer, 0, size); elementData = buffer; elementData[size] = o; size++; }else { elementData[size] = o; size++; } } /* * ָ��λ�����Ԫ�� * ��size+1���� lengthҪ�����������ٽ�����Ӳ��� */ public void add(int index, Object o) throws Exception{ if(index <0){ throw new Exception("��������Ϊ0��"); }else if(index >= size){ throw new Exception("�������ޣ�"); }else if(size+1<elementData.length){ Object [] newArr = new Object[size-index+1]; newArr[0] = o; System.arraycopy(elementData, index, newArr, 1, size-index); System.arraycopy(newArr, 0, elementData, index, size-index+1); size++; }else{ Object[] buffer = new Object[size+15]; System.arraycopy(elementData, 0, buffer, 0, size); elementData = buffer; Object [] newArr = new Object[size-index+1]; newArr[0] = o; System.arraycopy(elementData, index, newArr, 1, size-index); System.arraycopy(newArr, 0, elementData, index, size-index+1); size++; } } public Object get(int index) throws Exception{ if(index>=size){ throw new Exception("�������ޣ�"); } return elementData[index]; } public Object remove(int index) throws Exception{ if(index>=size){ throw new Exception("�������ޣ�"); } Object out = elementData[index]; Object[] temp = new Object[size-index-1]; System.arraycopy(elementData, index+1, temp, 0, size-index-1); System.arraycopy(temp, 0, elementData,index, size-index-1); size--; return out; } public int size(){ return this.size; } @Override public String toString() { Object[] objs = new Object[size]; System.arraycopy(elementData, 0,objs , 0, size); return Arrays.toString(objs); } public Iterator iterator(){ return new Iterator() { int cursor = 0; public Object next() throws Exception { cursor++; return get(cursor-1); } public boolean hasNext() { return this.cursor<size(); } }; } public static void main(String[] args) throws Exception { List list = new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(6); list.add(0, 5); list.add(4,7); list.add(2,9); System.out.println(list); System.out.println(list.size()); System.out.println(list.get(3)); System.out.println(list.remove(0)); System.out.println(list); LinkedList<Integer> ll = new LinkedList<Integer>(); ll.add(null); } }