ArrayList的底层实现-Java
public class MyArrayList<AnyType> implements Iterable<AnyType> {
public static final int DEFAULT_CAPACITY = 10;
private int theSize;
private AnyType[] theItem;
public MyArrayList() {
doClear();
}
public void clear() {
doClear();
}
public void doClear() {
theSize = 0;
ensureCapacity(DEFAULT_CAPACITY);
}
public int size() {
return theSize;
}
public boolean isEmpty(){
return size() == 0;
}
public void trimTosize() {
ensureCapacity(size());
}
public AnyType get(int idx) {
if (idx < 0 || idx >= size()) {
throw new ArrayIndexOutOfBoundsException();
}
return theItem[idx];
}
public AnyType set(int idx, AnyType newVal) {
if (idx < 0 || idx >= size()) {
throw new ArrayIndexOutOfBoundsException();
}
AnyType old = theItem[idx];
theItem[idx] = newVal;
return old;
}
public void ensureCapacity(int newCapacity) {
if (newCapacity < size()) return;
AnyType[] old = theItem;
theItem = (AnyType[]) new Object[newCapacity];
for (int i = 0; i < size(); i++) {
theItem[i] = old[i];
}
}
public boolean add(AnyType val) {
add(size(), val);
return true;
}
public void add(int idx, AnyType val) {
if (theItem.length == size()) {
ensureCapacity(size()*2+1);
}
for (int i = size(); i > idx; i--) {
theItem[i] = theItem[i - 1];
}
theItem[idx] = val;
theSize++;
}
public AnyType remove(int idx) {
AnyType removeItem = theItem[idx];
for (int i = idx; i < size() - 1; i++) {
theItem[i] = theItem[i+1];
}
theSize--;
return removeItem;
}
public java.util.Iterator<AnyType> iterator() {
return new ArrayListIerator();
}
private class ArrayListIerator implements java.util.Iterator<AnyType> {
private int current = 0;
public boolean hasNext() {
return current < size();
}
public AnyType next() {
if (!hasNext()) {
throw new java.util.NoSuchElementException();
}
return theItem[current++];
}
public void remove() {
MyArrayList.this.remove(current--);
}
}
}
测试类
public class myArrayListTest {
public static void main(String[] args) {
MyArrayList<Integer> list = new MyArrayList<Integer>();
list.add(1);
list.add(2);
for (Integer integer : list) {
System.out.println(integer);
}
System.out.println(list.size());
list.add(8);
list.add(8);
list.add(8);
list.add(8);
list.add(8);
list.add(8);
list.add(8);
list.add(8);
list.add(8);
list.add(8);
list.add(8);
System.out.println(list.size());
for (Integer integer : list) {
System.out.println(integer);
}
System.out.println("clear");
list.clear();
for (Integer integer : list) {
System.out.println(integer);
}
}
}