首先是集合类的接口: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,如今它自动扩容了接口