自定义集合类和java数据结构底层的实现
对ArrayList的实现,实际就是动态数组 代码分析package cn.itcast.shujujiegou;
package cn.itcast.shujujiegou;
import java.util.Iterator;
/**
* Created by likailong on 2016/9/27.
*/
public class MyArrayList<T > implements Iterable<T> {
private static final int DEFAULT_SIZE=10;
private int theSize;
private T [] theItems;
public MyArrayList(){
doClear();
}
public void clear(){
doClear();
}
private void doClear() {
theSize=0;
ensureCapacity(DEFAULT_SIZE);
}
public void trimToSize(){
ensureCapacity(size());
}
public T get(int index){
if(index<0||index>=size())
throw new IndexOutOfBoundsException("数组脚标越界");
return theItems[index];
}
public T set(int index,T element){
if(index<0||index>=size())
throw new IndexOutOfBoundsException("数组脚标越界");
T old=theItems[index];
theItems[index]=element;
return old;
}
public boolean add(T element){
add(size(),element);
return true;
}
public void add(int index,T element){
if(theItems.length==size())
ensureCapacity(size()*2+1);
for(int i=size();i>index;i--){
theItems[i]=theItems[i-1];
}
theItems[index]=element;
theSize++;
}
public T remove(int index){
T remove=theItems[index];
for(int i=index;i<size()-1;i++)
theItems[i]=theItems[i+1];
theSize--;
return remove;
}
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 String toString(){
StringBuilder s=new StringBuilder();
s.append("[");
for(int i=0;i<theSize;i++){
s.append(","+theItems[i]);
}
s.append("]");
return s.toString();
}
public int size() {
return theSize;
}
public boolean isEmpty(){
return size()==0;
}
@Override
public Iterator<T> iterator() {
return new ArrayListLiterator();
}
private class ArrayListLiterator implements Iterator<T>{
private int current=0;
@Override
public boolean hasNext() {
return current<size();
}
@Override
public T next() {
return theItems[current++];
}
public void remove(){
MyArrayList.this.remove(--current);
}
}
}