1 定义基本类方式实现迭代器 :
/** * 简化迭代器原理 * hasNext * next * @author Administrator * */ public class MyArrayList { private String[] elem ={"a","b","c","d","e","f","g"}; private int size = elem.length; private int cursor =-1; /** * 判断是否存在下一个元素 * @return */ public boolean hasNext(){ return cursor+1<size; } /** * 获取下一个元素 */ public String next(){ cursor++; //移动一次 return elem[cursor]; } /** * 删除元素 */ public void remove(){ } /** * @param args */ public static void main(String[] args) { // 只能使用这个对象一次 MyArrayList list = new MyArrayList(); while(list.hasNext()){ System.out.println(list.next()); } list = new MyArrayList(); while(list.hasNext()){ System.out.println(list.next()); } } }
2 包装基本类,实现基本类提供的迭代器能够被多次调用
/** * 简化迭代器原理 加入接口 提供方法 * hasNext * next * @author Administrator * */ public class MyArrayList2 { private String[] elem ={"a","b","c","d","e","f","g"}; private int size = elem.length; private class MyIt implements Iterator<String>{ private int cursor =-1; /** * 判断是否存在下一个元素 * @return */ public boolean hasNext(){ return cursor+1<size; } /** * 获取下一个元素 */ public String next(){ cursor++; //移动一次 return elem[cursor]; } /** * 删除元素 */ public void remove(){ //没有实现 } } public Iterator<String> iterator(){ return new MyIt(); } /** * @param args */ public static void main(String[] args) { MyArrayList2 list = new MyArrayList2(); // 把对象包装起来,在调用函数中不断的new出新对象,cursor不断的从-1开始,实现多次调用 Iterator<String> it =list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } it =list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
3 使用匿名内部类 包装迭代器 :
public class MyArrayList3 implements java.lang.Iterable<String> { private String[] elem ={"a","b","c","d","e","f","g"}; private int size = elem.length; /** * 匿名内部类 * @return */ public Iterator<String> iterator(){ return new Iterator<String>(){ private int cursor =-1; /** * 判断是否存在下一个元素 * @return */ public boolean hasNext(){ return cursor+1<size; } /** * 获取下一个元素 */ public String next(){ cursor++; //移动一次 return elem[cursor]; } /** * 删除元素 */ public void remove(){ //没有实现 } }; } /** * @param args */ public static void main(String[] args) { MyArrayList3 list = new MyArrayList3(); Iterator<String> it =list.iterator(); while(it.hasNext()){ System.out.println(it.next()); it.remove(); //删除元素 } it =list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } System.out.println("增强for,必须实现java.lang.Iterable接口,重写iterator方法"); for(String temp:list){ System.out.println(temp); } } }