迭代器Iterator的底层实现原理

简介: 第一步:没有接口的迭代器简单实现原理   1 package com.bjsxt.xiaofei; 2 /** 3 * 迭代器底层原理 4 * 方法: 5 * hasNext() 6 * next() 7 * remove() 8 * @ClassN...

第一步:没有接口的迭代器简单实现原理

 

 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 }
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     * @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 }
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

 

相关文章
|
7月前
|
设计模式 算法 C++
【C++】STL之迭代器介绍、原理、失效
【C++】STL之迭代器介绍、原理、失效
140 2
每日一道面试题之迭代器 Iterator 是什么?
每日一道面试题之迭代器 Iterator 是什么?
|
Java 索引
每日一道面试题之Iterator 和 ListIterator 有什么区别?
每日一道面试题之Iterator 和 ListIterator 有什么区别?
|
7月前
|
开发者
迭代器(Iterator)遍历的两种方法(for和while)
迭代器(Iterator)遍历的两种方法(for和while)
|
7月前
|
Java
Java集合框架:什么是迭代器(Iterator)?
Java集合框架:什么是迭代器(Iterator)?
69 0
|
设计模式 Java 索引
Java集合(3)--Iterator迭代器
Java集合(3)--Iterator迭代器
153 1
Java集合(3)--Iterator迭代器
|
存储 Java
Java集合-Iterator
Java集合-Iterator
131 2
Java集合-Iterator
|
Java 数据库连接 uml
迭代器底层原理
深究迭代器底层原理
188 0
C#编程-94:迭代器Iterator简单实例
C#编程-94:迭代器Iterator简单实例
114 0
C#编程-94:迭代器Iterator简单实例