zoukankan      html  css  js  c++  java
  • 迭代器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     * @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
  • 相关阅读:
    线程池、进程池(concurrent.futures模块)和协程
    python中socket、进程、线程、协程、池的创建方式和应用场景
    IO多路复用和local概念
    pymysql模块
    HTML初识
    CSS之选择器
    CSS之样式属性(背景固定、圆形头像、模态框)
    字符串格式的方法%s、format和python3.6新特性f-string和类型注解
    common-pool2 使用
    apache-common pool的使用
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/3876330.html
Copyright © 2011-2022 走看看