首页 > 代码库 > 迭代器Iterator的底层实现原理
迭代器Iterator的底层实现原理
第一步:没有接口的迭代器简单实现原理
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 * @return27 * @return boolean 返回类型 28 * @author 尚晓飞29 * @date 2014-7-29 下午7:09:5030 */31 public boolean hasNext(){32 return cursor+1<size;33 }34 35 /**36 * 获取下一个元素37 * @Title: next 38 * @Description: TODO(这里用一句话描述这个方法的作用) 39 * @return40 * @return String 返回类型 41 * @author 尚晓飞42 * @date 2014-7-29 下午7:10:3643 */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:3956 */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 * @return34 * @return Iterator<String> 返回类型 35 * @author 尚晓飞36 * @date 2014-7-29 下午7:46:4437 */38 public Iterator<String> iterator(){39 //new 一个匿名类40 return new Iterator<String>(){41 /**42 * 判断迭代器是否有下一个元素43 * @Title: hasNext 44 * @Description: TODO(这里用一句话描述这个方法的作用) 45 * @return46 * @return boolean 返回类型 47 * @author 尚晓飞48 * @date 2014-7-29 下午7:09:5049 */50 public boolean hasNext(){51 return cursor+1<size;52 }53 54 /**55 * 获取下一个元素56 * @Title: next 57 * @Description: TODO(这里用一句话描述这个方法的作用) 58 * @return59 * @return String 返回类型 60 * @author 尚晓飞61 * @date 2014-7-29 下午7:10:3662 */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:3975 */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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。