首先是集合類的接口:java
public interface ICollection<E> { public int size();//集合大小 public boolean add(E e);//集合中的添加方法 public IIterator<E> iterator();//迭代器 public Object get(int index);//經過下標得到元素 }
集合接口的實現:數組
public class MyCollection<E> implements ICollection<E>{ private Object array[];//集合中存放內容的數組,必須爲 private ,由於不可以被外部訪問到 private int position=-1;//用來判斷集合中放了多少個元素了, array.length 返回的是容器的大小,沒法獲得已經存放了多少元素 private int max;//集合的最大容量 public MyCollection(){//無參構造方法,集合大小爲10 this(10); } public MyCollection(int capacity){//有參構造方法 if(capacity<=0){ throw new IllegalArgumentException("Illegal param : "+capacity); } array=new Object[capacity]; this.max=capacity; } @Override public int size() { return (position+1); } @Override public boolean add(E e) { if((position+1)>=max){//若是集合中存放的元素個數>=最大容量 ,此時還要放入元素,就必須進行擴容了 max=max/2*3+1;//這個擴容大小是模仿的 ArrayList enlarge();//擴容 } array[++position]=e; return true; } private void enlarge(){ //將 array數組的內容拷貝到 array 中 ,並將容量擴充到 max ----Arrays.copyOf 這個方法的底層實現仍是 使用的 System.arraycopy 這個方法 array=Arrays.copyOf(array, max); } @Override public IIterator<E> iterator() {//能夠用迭代器去對集合進行操做,例如:遍歷 return new MyIterator<E>(this); } @Override public Object get(int index) { return array[index]; } }
迭代器接口:ide
public interface IIterator<E> { public boolean hasNext();//判斷是否還有下一個 public Object next();//獲得集合下一個元素 }
迭代器接口的實現:測試
public class MyIterator<E> implements IIterator<E>{ public ICollection<E> collection; private int top=-1;//下標 public MyIterator(ICollection<E> collection){//經過集合那裏的 iterator() 方法將集合 傳進來. this.collection=collection; } @Override public boolean hasNext() { if(top<collection.size()-1){ return true; }else{ return false; } } @Override public Object next() { return collection.get(++top); } }
如今進行測試:this
public class Test { public static void main(String[] args) { ICollection<String> c=new MyCollection<String>(2); c.add("xiaofeiji"); c.add("xiaoxiao"); c.add("xiaobaicai"); c.add("1"); IIterator<String> iterator=c.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } }
結果在控制檯按順序輸出.code
原先容量只有2,如今它自動擴容了接口