案例讲解
迭代模式
不暴露集合的内部结构,又让外部访问集合中的数据
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()); } } }