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

 package com.bjsxt.xiaofei;
/**
* 迭代器底层原理
* 方法:
* hasNext()
* next()
* remove()
* @ClassName: MyAarryList
* @Description: TODO(这里用一句话描述这个类的作用)
* @author 尚晓飞
* @date 2014-7-29 下午7:06:09
*
*/
public class MyAarryList {
//容器底层是数组
private String[] str={"a","b","c","d","e","f","g","h"};
//数组的长度
private int size=str.length;
//游标
private int cursor=-1; /**
* 判断迭代器是否有下一个元素
* @Title: hasNext
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return boolean 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:09:50
*/
public boolean hasNext(){
return cursor+1<size;
} /**
* 获取下一个元素
* @Title: next
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return String 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:10:36
*/
public String next(){
cursor++;
return str[cursor];
} /**
* 移除
* @Title: remove
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return void 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:20:39
*/
public void remove(){
//没有实现
} public static void main(String[] args) {
MyAarryList list=new MyAarryList();
//测试简易迭代器
while (list.hasNext()) {
String element=list.next();
System.out.println("MyAarryList.main()"+element); }
}
}

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

 思想至上,原理至上

 package com.bjsxt.xiaofei;

 import java.util.Iterator;

 /**
* 迭代器底层原理
* 方法:
* hasNext()
* next()
* remove()
* @ClassName: MyAarryList
* @Description: TODO(这里用一句话描述这个类的作用)
* @author 尚晓飞
* @date 2014-7-29 下午7:06:09
*
*/
public class MyAarryList2 {
//容器底层是数组
private String[] str={"a","b","c","d","e","f","g","h"};
//数组的长度
private int size=str.length;
//游标
private int cursor=-1; /**
* 内部类,实现迭代器的功能,迭代器类
* @ClassName: myIt
* @Description: TODO(这里用一句话描述这个类的作用)
* @author 尚晓飞
* @date 2014-7-29 下午7:23:09
*
*/
private class myIt implements Iterator<String>{
/**
* 判断迭代器是否有下一个元素
* @Title: hasNext
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return boolean 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:09:50
*/
public boolean hasNext(){
return cursor+1<size;
} /**
* 获取下一个元素
* @Title: next
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return String 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:10:36
*/
public String next(){
cursor++;
return str[cursor];
} /**
* 移除
* @Title: remove
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return void 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:20:39
*/
public void remove(){
//没有实现
}
} /**
* 容器类中有一个方法,返回本容器的迭代器
* @Title: iterator
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return Iterator<String> 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:25:29
*/
public Iterator<String> iterator(){
return new myIt();
}
public static void main(String[] args) {
//一个容器
MyAarryList2 list=new MyAarryList2();
//获得该容器对象的迭代器
Iterator<String> iterator=list.iterator();
//测试迭代器
while (iterator.hasNext()) {
String element=iterator.next();
System.out.println("MyAarryList2.main()"+element); } }
}

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

 package com.bjsxt.xiaofei;

 import java.util.Iterator;

 /**
* 迭代器底层原理
* 方法:
* hasNext()
* next()
* remove()
* @ClassName: MyAarryList
* @Description: TODO(这里用一句话描述这个类的作用)
* @author 尚晓飞
* @date 2014-7-29 下午7:06:09
*
*/
public class MyAarryList3 {
//容器底层是数组
private String[] str={"a","b","c","d","e","f","g","h"};
//数组的长度
private int size=str.length;
//游标
private int cursor=-1; /**
* 匿名内部类,实现容器的迭代器功能
* @Title: iterator
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return Iterator<String> 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:46:44
*/
public Iterator<String> iterator(){
//new 一个匿名类
return new Iterator<String>(){
/**
* 判断迭代器是否有下一个元素
* @Title: hasNext
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return boolean 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:09:50
*/
public boolean hasNext(){
return cursor+1<size;
} /**
* 获取下一个元素
* @Title: next
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return String 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:10:36
*/
public String next(){
cursor++;
return str[cursor];
} /**
* 移除
* @Title: remove
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return void 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:20:39
*/
public void remove(){
//没有实现
}
};
} public static void main(String[] args) {
//一个容器
MyAarryList3 list=new MyAarryList3();
//获得该容器对象的迭代器
Iterator<String> iterator=list.iterator();
//测试迭代器
while (iterator.hasNext()) {
String element=iterator.next();
System.out.println("MyAarryList2.main()"+element); } }
}

第四步:增强for循环实现借助迭代器

 package com.bjsxt.xiaofei;

 import java.util.Iterator;

 /**
* 迭代器底层原理
* 方法:
* hasNext()
* next()
* remove()
* @ClassName: MyAarryList
* @Description: TODO(这里用一句话描述这个类的作用)
* @author 尚晓飞
* @date 2014-7-29 下午7:06:09
*
*/
public class MyAarryList3 implements java.lang.Iterable<String>{
//容器底层是数组
private String[] str={"a","b","c","d","e","f","g","h"};
//数组的长度
private int size=str.length;
//游标
private int cursor=-1; /**
* 匿名内部类,实现容器的迭代器功能
* @Title: iterator
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return Iterator<String> 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:46:44
*/
public Iterator<String> iterator(){
//new 一个匿名类
return new Iterator<String>(){
/**
* 判断迭代器是否有下一个元素
* @Title: hasNext
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return boolean 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:09:50
*/
public boolean hasNext(){
return cursor+1<size;
} /**
* 获取下一个元素
* @Title: next
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return
* @return String 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:10:36
*/
public String next(){
cursor++;
return str[cursor];
} /**
* 移除
* @Title: remove
* @Description: TODO(这里用一句话描述这个方法的作用)
* @return void 返回类型
* @author 尚晓飞
* @date 2014-7-29 下午7:20:39
*/
public void remove(){
//没有实现
}
};
} public static void main(String[] args) {
//一个容器
MyAarryList3 list=new MyAarryList3();
//获得该容器对象的迭代器
Iterator<String> iterator=list.iterator();
//测试迭代器
while (iterator.hasNext()) {
String element=iterator.next();
System.out.println("MyAarryList2.main()"+element); } //增强for循环,实现java.lang.Iterable的接口,重写Interator()方法。其实增强for循环也借助了迭代器
for(String temp:list){
System.out.println("增强for"+temp);
}
}
}

迭代器Iterator的底层实现原理的更多相关文章

  1. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...

  2. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  3. Map的底层实现原理

    一,前言 1.1,概述 ​ 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射(K-V).Java提供了专门的集合类用 ...

  4. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

    ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算h ...

  5. Python的迭代器(iterator)和生成器(constructor)

    一.迭代器(iterator) 1.迭代器的概述 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器 ...

  6. C++迭代器 iterator【转】

    1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型.(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter ...

  7. 迭代器 Iterator

    迭代器 Iterator 2016-5-7 可以这样说,迭代器统一了对容器的访问方式. 考虑这样的情景:原本是对着List编码,但是后来发现需要把相同的代码用于Set.我们需要一种不关心容器类型 而能 ...

  8. Python中生成器generator和迭代器Iterator的使用方法

    一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...

  9. (转)HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

    ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算h ...

随机推荐

  1. iterm2用法与技巧

      1.设置窗口 定位到 [Preferences - Profiles - Window] 新窗口设定风格设为 [Top of Screen],这样每次新打开终端都会固定出现在屏幕的顶端且不会有窗口 ...

  2. Java基础-this关键字和构造方法(10)

    this关键字 方法被哪个对象调用,this就代表那个对象当局部变量隐藏成员变量时,使用this关键字(例如构造方法和访问器). 构造方法 构造方法作用概述 给对象的数据进行初始化 构造方法格式 方法 ...

  3. Prism5.0开发人员指南内容 Contents of the Developer's Guide to Prism Library 5.0 for WPF(英汉对照版)

    The Prism for WPF guide contains the following topics: Prism指南包含以下内容: Download and Setup Prism 下载并安装 ...

  4. 使用array_merge重新排列数组下标

    array_merge() 函数把两个或多个数组合并为一个数组. 如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的).如果数组是数字索引的,则键名会以连续方式重新索引. 注释:如果仅 ...

  5. LinkedStack<T>

    public class LinkedStack<T> { private static class Node<U> { U item; Node<U> next; ...

  6. 百视通与微软共同宣布9月在华发布Xbox One

    4月30日消息,百视通今日与微软共同宣布,于今年9月在华发布Xbox One.这是继百视通与微软2013年9月成立合资公司后,双方合作的又一进展. 微软副总裁,硬件及设计工作室部门主管尤瑟夫 •梅赫迪 ...

  7. Tesseract-OCR 训练教程(一)

    实际应用中[font]替换为你自己的字体名,比如newfont.hehe等 1.根据tif生成box文件(位置宽高等信息)tesseract [font].font.exp0.tif [font].f ...

  8. ios 从网络上获取图片

    -(UIImage *) getImageFromURL:(NSString *)fileURL { NSLog(@"执行图片下载函数"); UIImage * result; N ...

  9. Python int操作

    a = 1 # 1 print(a.bit_length()) #计算一个数字的二进制长度.没啥用

  10. 15款Cocos2d-x游戏源码

    (1)用cocos2d-x开发的中国象棋游戏源码 使用Cocos2d-X2.2.3开发的一款中国象棋游戏,游戏中可以实现.新局面.悔棋.游戏音乐.胜利后会显示游戏结果. 源码下载:http://www ...