代码
package com.mybatis.test;
import com.sun.org.apache.xalan.internal.xsltc.dom.ArrayNodeListIterator;
import java.util.Iterator;
public class MyArrayList<T> implements Iterable<T> {
private static final int DEFAULT_CAPACITY = 10;
private int theSize;
private T[] theItems;
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 T get(int idx){
if(idx <0 ||idx >=size()){
throw new ArrayIndexOutOfBoundsException();
}
return theItems[idx];
}
public T set(int idx,T newVal){
if(idx < 0||idx >=size()){
throw new ArrayIndexOutOfBoundsException();
}
T old = theItems[idx];
theItems[idx] = newVal;
return old;
}
public void ensureCapacity(int newCapacity){
if(newCapacity < theSize){
return;
}
T[] old = theItems;
theItems = (T[])new Object[newCapacity];
for (int i = 0;i < size();i++){
theItems[i] = old[i];
}
}
public boolean add(T x){
add(size(),x);
return true;
}
public void add(int idx,T x){
if(theItems.length == size()){
ensureCapacity(size()*2+1);
}
for(int i = theSize;i > idx;i--){
theItems[i] = theItems[i - 1];
}
theItems[idx] = x;
theSize++;
}
public T remove(int idx) {
T removedItem = theItems[idx];
for (int i = idx; i < size() - 1; i++) {
theItems[i] = theItems[i + 1];
}
theSize--;
return removedItem;
}
public Iterator<T> iterator() {
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator<T>{
private int current = 0;
public boolean hasNext() {
return current < size();
}
public T next() {
if(!hasNext()){
throw new java.util.NoSuchElementException();
}
return theItems[current++];
}
public void remove(){
MyArrayList.this.remove(--current);
}
}
}
- 这里面theSize是当前集合的项数,theItems是这个集合的数组
- doclear方法用于初始化数组或者清除数组
- size方法返回当前的项数
- isEmpty方法判断是否为空
- tirmToSize方法将集合的容量设置为与项数相同
- get和set方法不说了
- ensureCapacity方法用于指定数组的容量、扩容等功能
- 两个add方法,一个是指定位置添加,另一个是从末尾添加
- remove移除
- iterator方法返回一个迭代器