第一步:没有接口的迭代器简单实现原理
1 package com.bjsxt.xiaofei; 2 /** 3 * 迭代器底层原理 4 * 方法: 5 * hasNext() 6 * next() 7 * remove() 8 * @ClassName: MyAarryList 9 * @Description: TODO(这里用一句话描述这个类的作用) 10 * @author 尚晓飞 11 * @date 2014-7-29 下午7:06:09 12 * 13 */ 14 public class MyAarryList { 15 //容器底层是数组 16 private String[] str={"a","b","c","d","e","f","g","h"}; 17 //数组的长度 18 private int size=str.length; 19 //游标 20 private int cursor=-1; 21 22 /** 23 * 判断迭代器是否有下一个元素 24 * @Title: hasNext 25 * @Description: TODO(这里用一句话描述这个方法的作用) 26 * @return 27 * @return boolean 返回类型 28 * @author 尚晓飞 29 * @date 2014-7-29 下午7:09:50 30 */ 31 public boolean hasNext(){ 32 return cursor+1<size; 33 } 34 35 /** 36 * 获取下一个元素 37 * @Title: next 38 * @Description: TODO(这里用一句话描述这个方法的作用) 39 * @return 40 * @return String 返回类型 41 * @author 尚晓飞 42 * @date 2014-7-29 下午7:10:36 43 */ 44 public String next(){ 45 cursor++; 46 return str[cursor]; 47 } 48 49 /** 50 * 移除 51 * @Title: remove 52 * @Description: TODO(这里用一句话描述这个方法的作用) 53 * @return void 返回类型 54 * @author 尚晓飞 55 * @date 2014-7-29 下午7:20:39 56 */ 57 public void remove(){ 58 //没有实现 59 } 60 61 public static void main(String[] args) { 62 MyAarryList list=new MyAarryList(); 63 //测试简易迭代器 64 while (list.hasNext()) { 65 String element=list.next(); 66 System.out.println("MyAarryList.main()"+element); 67 68 } 69 } 70 }
第二步:有接口的迭代器简单实现原理,基本等同容器类的迭代器
思想至上,原理至上
1 package com.bjsxt.xiaofei; 2 3 import java.util.Iterator; 4 5 /** 6 * 迭代器底层原理 7 * 方法: 8 * hasNext() 9 * next() 10 * remove() 11 * @ClassName: MyAarryList 12 * @Description: TODO(这里用一句话描述这个类的作用) 13 * @author 尚晓飞 14 * @date 2014-7-29 下午7:06:09 15 * 16 */ 17 public class MyAarryList2 { 18 //容器底层是数组 19 private String[] str={"a","b","c","d","e","f","g","h"}; 20 //数组的长度 21 private int size=str.length; 22 //游标 23 private int cursor=-1; 24 25 26 /** 27 * 内部类,实现迭代器的功能,迭代器类 28 * @ClassName: myIt 29 * @Description: TODO(这里用一句话描述这个类的作用) 30 * @author 尚晓飞 31 * @date 2014-7-29 下午7:23:09 32 * 33 */ 34 private class myIt implements Iterator<String>{ 35 /** 36 * 判断迭代器是否有下一个元素 37 * @Title: hasNext 38 * @Description: TODO(这里用一句话描述这个方法的作用) 39 * @return 40 * @return boolean 返回类型 41 * @author 尚晓飞 42 * @date 2014-7-29 下午7:09:50 43 */ 44 public boolean hasNext(){ 45 return cursor+1<size; 46 } 47 48 /** 49 * 获取下一个元素 50 * @Title: next 51 * @Description: TODO(这里用一句话描述这个方法的作用) 52 * @return 53 * @return String 返回类型 54 * @author 尚晓飞 55 * @date 2014-7-29 下午7:10:36 56 */ 57 public String next(){ 58 cursor++; 59 return str[cursor]; 60 } 61 62 /** 63 * 移除 64 * @Title: remove 65 * @Description: TODO(这里用一句话描述这个方法的作用) 66 * @return void 返回类型 67 * @author 尚晓飞 68 * @date 2014-7-29 下午7:20:39 69 */ 70 public void remove(){ 71 //没有实现 72 } 73 } 74 75 76 /** 77 * 容器类中有一个方法,返回本容器的迭代器 78 * @Title: iterator 79 * @Description: TODO(这里用一句话描述这个方法的作用) 80 * @return 81 * @return Iterator<String> 返回类型 82 * @author 尚晓飞 83 * @date 2014-7-29 下午7:25:29 84 */ 85 public Iterator<String> iterator(){ 86 return new myIt(); 87 } 88 public static void main(String[] args) { 89 //一个容器 90 MyAarryList2 list=new MyAarryList2(); 91 //获得该容器对象的迭代器 92 Iterator<String> iterator=list.iterator(); 93 //测试迭代器 94 while (iterator.hasNext()) { 95 String element=iterator.next(); 96 System.out.println("MyAarryList2.main()"+element); 97 98 } 99 100 } 101 }
第三步:匿名内部类实现迭代器原理
1 package com.bjsxt.xiaofei; 2 3 import java.util.Iterator; 4 5 /** 6 * 迭代器底层原理 7 * 方法: 8 * hasNext() 9 * next() 10 * remove() 11 * @ClassName: MyAarryList 12 * @Description: TODO(这里用一句话描述这个类的作用) 13 * @author 尚晓飞 14 * @date 2014-7-29 下午7:06:09 15 * 16 */ 17 public class MyAarryList3 { 18 //容器底层是数组 19 private String[] str={"a","b","c","d","e","f","g","h"}; 20 //数组的长度 21 private int size=str.length; 22 //游标 23 private int cursor=-1; 24 25 26 27 28 29 /** 30 * 匿名内部类,实现容器的迭代器功能 31 * @Title: iterator 32 * @Description: TODO(这里用一句话描述这个方法的作用) 33 * @return 34 * @return Iterator<String> 返回类型 35 * @author 尚晓飞 36 * @date 2014-7-29 下午7:46:44 37 */ 38 public Iterator<String> iterator(){ 39 //new 一个匿名类 40 return new Iterator<String>(){ 41 /** 42 * 判断迭代器是否有下一个元素 43 * @Title: hasNext 44 * @Description: TODO(这里用一句话描述这个方法的作用) 45 * @return 46 * @return boolean 返回类型 47 * @author 尚晓飞 48 * @date 2014-7-29 下午7:09:50 49 */ 50 public boolean hasNext(){ 51 return cursor+1<size; 52 } 53 54 /** 55 * 获取下一个元素 56 * @Title: next 57 * @Description: TODO(这里用一句话描述这个方法的作用) 58 * @return 59 * @return String 返回类型 60 * @author 尚晓飞 61 * @date 2014-7-29 下午7:10:36 62 */ 63 public String next(){ 64 cursor++; 65 return str[cursor]; 66 } 67 68 /** 69 * 移除 70 * @Title: remove 71 * @Description: TODO(这里用一句话描述这个方法的作用) 72 * @return void 返回类型 73 * @author 尚晓飞 74 * @date 2014-7-29 下午7:20:39 75 */ 76 public void remove(){ 77 //没有实现 78 } 79 }; 80 } 81 82 83 public static void main(String[] args) { 84 //一个容器 85 MyAarryList3 list=new MyAarryList3(); 86 //获得该容器对象的迭代器 87 Iterator<String> iterator=list.iterator(); 88 //测试迭代器 89 while (iterator.hasNext()) { 90 String element=iterator.next(); 91 System.out.println("MyAarryList2.main()"+element); 92 93 } 94 95 } 96 }
第四步:增强for循环实现借助迭代器
1 package com.bjsxt.xiaofei; 2 3 import java.util.Iterator; 4 5 /** 6 * 迭代器底层原理 7 * 方法: 8 * hasNext() 9 * next() 10 * remove() 11 * @ClassName: MyAarryList 12 * @Description: TODO(这里用一句话描述这个类的作用) 13 * @author 尚晓飞 14 * @date 2014-7-29 下午7:06:09 15 * 16 */ 17 public class MyAarryList3 implements java.lang.Iterable<String>{ 18 //容器底层是数组 19 private String[] str={"a","b","c","d","e","f","g","h"}; 20 //数组的长度 21 private int size=str.length; 22 //游标 23 private int cursor=-1; 24 25 26 27 28 29 /** 30 * 匿名内部类,实现容器的迭代器功能 31 * @Title: iterator 32 * @Description: TODO(这里用一句话描述这个方法的作用) 33 * @return 34 * @return Iterator<String> 返回类型 35 * @author 尚晓飞 36 * @date 2014-7-29 下午7:46:44 37 */ 38 public Iterator<String> iterator(){ 39 //new 一个匿名类 40 return new Iterator<String>(){ 41 /** 42 * 判断迭代器是否有下一个元素 43 * @Title: hasNext 44 * @Description: TODO(这里用一句话描述这个方法的作用) 45 * @return 46 * @return boolean 返回类型 47 * @author 尚晓飞 48 * @date 2014-7-29 下午7:09:50 49 */ 50 public boolean hasNext(){ 51 return cursor+1<size; 52 } 53 54 /** 55 * 获取下一个元素 56 * @Title: next 57 * @Description: TODO(这里用一句话描述这个方法的作用) 58 * @return 59 * @return String 返回类型 60 * @author 尚晓飞 61 * @date 2014-7-29 下午7:10:36 62 */ 63 public String next(){ 64 cursor++; 65 return str[cursor]; 66 } 67 68 /** 69 * 移除 70 * @Title: remove 71 * @Description: TODO(这里用一句话描述这个方法的作用) 72 * @return void 返回类型 73 * @author 尚晓飞 74 * @date 2014-7-29 下午7:20:39 75 */ 76 public void remove(){ 77 //没有实现 78 } 79 }; 80 } 81 82 83 public static void main(String[] args) { 84 //一个容器 85 MyAarryList3 list=new MyAarryList3(); 86 //获得该容器对象的迭代器 87 Iterator<String> iterator=list.iterator(); 88 //测试迭代器 89 while (iterator.hasNext()) { 90 String element=iterator.next(); 91 System.out.println("MyAarryList2.main()"+element); 92 93 } 94 95 //增强for循环,实现java.lang.Iterable的接口,重写Interator()方法。其实增强for循环也借助了迭代器 96 for(String temp:list){ 97 System.out.println("增强for"+temp); 98 } 99 } 100 }