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

 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. C++数组引用

    C++数组引用 一.数组引用 C++数组的引用:引用即别名这样比指针传地址方便多了 形参中的(&a)[10]可以就看做a数组的别名,肯定要指定数组大小,如果没有后面的数组大小,天知道是变量还是 ...

  2. English trip -- VC(情景课)5 D

    Read 阅读 Listen and read. 听并读 Notice from Riverside Library Come and visit Riverside Library.The new ...

  3. Spring Boot 启动 Struts 报冲突

    错误信息如下: Caused by: com.opensymphony.xwork2.config.ConfigurationException: Bean type class com.opensy ...

  4. Java 本地环境设置

    如果你希望在你的本地环境中设置 Java 程序环境,下面的这部分将会指导你在你的本地计算机上下载和设置 Java 环境.你可以按照下面的步骤进行. Java SE 目前是免费下载的,你可以通过单击下面 ...

  5. Yet Another Ball Problem CodeForces - 1118E (简单构造)

    大意: 求构造n个pair, 每个pair满足 对于每k组, 让$b_i$为$[1,k]$, $g_i$循环右移就好了 int n, k, cnt; int main() { scanf(" ...

  6. hdu1584

    蜘蛛牌 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. 安装docker CE for CentOS

    Uninstall old versions sudo yum remove docker \                 docker-client \                 dock ...

  8. Oracle 数据库分析

    一.数据库分析 二.表的分析 1.分析表exec dbms_stats.gather_table_stats('SFISM4','R_SN_DETAIL_T',CASCADE=>TRUE);ex ...

  9. Cetus

    转自:https://github.com/Lede-Inc/cetus Cetus 简介 Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能.Cetus ...

  10. struts2 正确配置通配符方式访问,报错解决

    今天遇到正确配置通配符访问action的方法,但是还是报错,原因struts 2.3 以后会内部会验证是否允许该方法,而我用的刚好是2.5的版本 要action配置中加上<allowed-met ...