package com.coding.basic;
import java.util.Arrays;
import java.util.NoSuchElementException;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData;
public ArrayList(){
this(64);
}
public ArrayList(int intSize) {
elementData = new Object[intSize];
}
public void add(Object o) {
checkMaxSize();
elementData[size] = o;
size++;
}
public void add(int index, Object o) {
checkMaxSize();
System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = o;
size++;
}
private void checkIndexRange(int index) {
if (index >= size || index < 0) {
throw new IndexOutOfBoundsException("index超出数组界限�?");
}
}
private void checkMaxSize() {
if (size >= elementData.length) {
elementData = Arrays.copyOf(elementData, elementData.length * 2);
}
}
public Object get(int index) {
checkIndexRange(index);
return elementData[index];
}
public Object remove(int index) {
Object o = get(index);
if (index == size - 1) {
elementData[index] = null;
} else {
System.arraycopy(elementData, index + 1, elementData, index, size - index);
}
size--;
return o;
}
public int size() {
return size;
}
public Iterator iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator {
private int current = 0;
@Override
public boolean hasNext() {
return current != size;
}
@Override
public Object next() {
if (current >= size) {
throw new NoSuchElementException();
}
return elementData[current++];
}
}
public static void main(String[] args) {
ArrayList arrayList = new ArrayList(5);
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
arrayList.add(5);
arrayList.add(6);
System.out.println(arrayList.get(1));
arrayList.add(1, 100);
System.out.println(arrayList.get(1));
System.out.println(arrayList.size);
System.out.println(arrayList.remove(2));
System.out.println(arrayList.get(2));
ArrayList mixArraylist = new ArrayList(5);
mixArraylist.add("String");
mixArraylist.add(100);
mixArraylist.add('f');
mixArraylist.add(3.1f);
mixArraylist.add(4L);
System.out.println(mixArraylist.get(1));
mixArraylist.add(1, 101);
System.out.println(mixArraylist.get(1));
System.out.println(mixArraylist.size);
System.out.println(mixArraylist.remove(2));
System.out.println(mixArraylist.get(2));
}
}