首页 > 代码库 > 迭代器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 }
View Code

 

第二步:有接口的迭代器简单实现原理,基本等同容器类的迭代器

 思想至上,原理至上

 

  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 }
View Code

 

第三步:匿名内部类实现迭代器原理

 

 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 }
View Code

 

第四步:增强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 }
View Code