List容器案例

案例讲解

迭代模式

     不暴露集合的内部结构,又让外部访问集合中的数据

package com.day1;

public interface Iterator <T>{
   public  boolean  hasNEXT();//判断是否有下一个元素
   public T next();//获取下一个元素的内容
   
   
}
package com.day1;

public class MyIterator<T> implements Iterator<T> {
    private  List<T> list=null;
    private  int  index=0;//访问到容器中数据的当前下标
     //创建一个迭代器对象的时候接受要被迭代的具体的容器对象   
    public MyIterator(List <T>list) {
        this.list = list;
        
    }
    //判断是否有下一个元素
    @Override
    public boolean hasNEXT() {
        return index<list.size();
    }

    //取出下一个元素
    @Override
    public T next() {
        return list.get(index++);
    }

}
package com.day1;

public interface List<T> {
   public  void add(T obj);//给具体容器添加元素
   public  T get(int index);;//获取指定位置上的元素
   public  int size();//获得容器中的元素个数
   public Iterator<T> iterator();//得到具体的迭代器对象
   
}
package com.day1;

public class ArrayList<T> implements List<T> {
    private Object[] obj=null;//声明一个Object类型的数组
    private int index;//数组的下标
    private int size;//记录数组元素中的个数
    
    public ArrayList() {
        obj=new Object[10];
        index=0;
        size=0;
    }

    @Override
    public void add(T obj) {
        this.obj[index++]=obj;//把数据存放到数组中
        size++;//元素的个数加1
    }
    @SuppressWarnings("unchecked")
    @Override
    public T get(int index) {
        
        return (T) this.obj[index];
    }

    @Override
    public int size() {
    
        return size;
    }

    @Override
    public Iterator<T> iterator() {
        
        return new MyIterator<>(this);
    }
  
}
package com.day1;

public class Test {
    public static void main(String[] args) {
    List<String> nameList=new ArrayList<String>();
    nameList.add("张三");
    nameList.add("李四");
    nameList.add("王五");
    Iterator<String> it=nameList.iterator();
    while(it.hasNEXT()) {
        System.out.println(it.next());
    }
    }
}

 

posted @ 2018-11-18 19:24  言西早石头侠  阅读(189)  评论(0编辑  收藏  举报