迭代器Iterator的底層實現原理

第一步:沒有接口的迭代器簡單實現原理java

 

 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

 

第二步:有接口的迭代器簡單實現原理,基本等同容器類的迭代器數組

 思想至上,原理至上ide

 

  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循環實現藉助迭代器spa

 

  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
相關文章
相關標籤/搜索