package Iterator; /** * @author cbf4Life [email protected] * 定义一个接口,所有的项目都是一个接口 */ public interface IProject { //从老板这里看到的就是项目信息 public String getProjectInfo(); } package Iterator; /** * @author cbf4Life [email protected] * 所有项目的信息类 */ public class Project implements IProject { //项目名称 private String name = ""; //项目成员数量 private int num = 0; //项目费用 private int cost = 0; //定义一个构造函数,把所有老板需要看到的信息存储起来 public Project(String name,int num,int cost){ //赋值到类的成员变量中 this.name = name; this.num = num; this.cost=cost; } //得到项目的信息 public String getProjectInfo() { String info = ""; //获得项目的名称 info = info+ "项目名称是:" + this.name; //获得项目人数 info = info + "\t项目人数: "+ this.num; //项目费用 info = info+ "\t 项目费用:"+ this.cost; return info; } } package Iterator; import java.util.ArrayList; /** * @author cbf4Life [email protected] * 老板来看项目信息了 */ public class Boss { public static void main(String[] args) { //定义一个List,存放所有的项目对象 ArrayList<IProject> projectList = new ArrayList<IProject>(); //增加星球大战项目 projectList.add(new Project("星球大战项目",10,10)); //增加扭转时空项目 projectList.add(new Project("扭转时空项目",100,1000)); //增加超人改造项目 projectList.add(new Project("超人改造项目",10000,100000)); //这边100个项目 for(int i=4;i<10;i++) projectList.add(new Project("第"+i+"个项目",i*5,i*100)); //遍历一下ArrayList,把所有的数据都取出 for(IProject project:projectList) System.out.println(project.getProjectInfo()); } }
public interface Iterable<T> { Iterator<T> iterator(); }Iterable接口,任何能"具有迭代"功能的聚集都要实现这个接口,它也只有一个方法,返回聚集的迭代器。
public interface Iterator<E> { boolean hasNext(); E next(); void remove(); }Iterator接口,就是具体的迭代器。
package iterator.v2; import java.util.ArrayList; import java.util.Iterator; /** * @author cbf4Life [email protected] * 定义一个迭代器 */ public class ProjectIterator implements Iterator<Object>{ //所有的项目都放在这里ArrayList中 private ArrayList<IProject> projectList = new ArrayList<IProject>(); private int currentItem = 0; //构造函数出入projectList public ProjectIterator(ArrayList<IProject> projectList){ this.projectList = projectList; } //判断是否还有元素,必须实现 public boolean hasNext() { //定义一个返回值 boolean b = true; if(this.currentItem>=projectList.size() || this.projectList.get(this.currentItem) == null){ b =false; } return b; } //取得下一个值 public IProject next() { return (IProject)this.projectList.get(this.currentItem++); } //删除一个对象 public void remove() { //暂时没有使用到 } } package iterator.v2; import java.util.Iterator; /** * @author cbf4Life [email protected] * 定义一个接口,所有的项目都是一个接口 */ public interface IProject extends Iterable<Object>{ //增加项目 public void add(String name,int num,int cost); //从老板这里看到的就是项目信息 public String getProjectInfo(); public Iterator<Object> iterator(); } package iterator.v2; import java.util.ArrayList; import java.util.Iterator; /** * @author cbf4Life [email protected] * 所有项目的信息类 */ @SuppressWarnings("all") public class Project implements IProject { //定义一个项目列表,说有的项目都放在这里 private ArrayList<IProject> projectList = new ArrayList<IProject>(); //项目名称 private String name = ""; //项目成员数量 private int num = 0; //项目费用 private int cost = 0; public Project(){ } //定义一个构造函数,把所有老板需要看到的信息存储起来 private Project(String name,int num,int cost){ ... } //增加项目 public void add(String name,int num,int cost){ this.projectList.add(new Project(name,num,cost)); } //得到项目的信息 public String getProjectInfo() { ... } //产生一个遍历对象 public Iterator<Object> iterator(){ return new ProjectIterator(this.projectList); } } package iterator.v2; /** * @author cbf4Life [email protected] * 老板来看项目信息了 */ public class Boss { public static void main(String[] args) { //定义一个List,存放所有的项目对象 IProject project = new Project(); //增加星球大战项目 project.add("星球大战项目ddddd",10,100); //增加扭转时空项目 project.add("扭转时空项目",100,10000); //增加超人改造项目 project.add("超人改造项目",10000,1000000); //这边100个项目 for(int i=4;i<14;i++){ project.add("第"+i+"个项目",i*5,i*1000); } //遍历一下ArrayList,把所有的数据都取出 ProjectIterator projectIterator = (ProjectIterator) project.iterator(); while(projectIterator.hasNext()){ IProject p = (IProject)projectIterator.next(); System.out.println(p.getProjectInfo()); } } }
uml图
public ListIterator<E> listIterator() { return new ListItr(0); } public Iterator<E> iterator() { return new Itr(); }
import java.util.*; public class IteratorDemo { public static void process(Collection c) { Iterator i = c.iterator(); //创建迭代器对象 //通过迭代器遍历聚合对象 while(i.hasNext()) { System.out.println(i.next().toString()); } } public static void main(String args[]) { Collection persons; persons = new ArrayList(); //创建一个ArrayList类型的聚合对象 persons.add("张无忌"); persons.add("小龙女"); persons.add("令狐冲"); persons.add("韦小宝"); persons.add("袁紫衣"); persons.add("小龙女"); process(persons); } }