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

 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. smarty课程---smarty3的安装和使用

    smarty课程---smarty3的安装和使用 一.总结 一句话总结:smarty 是什么,就不多说了,用过php,接触过php的人都对smarty 再熟悉不过了.它是一个很强大的代码分离软件,作为 ...

  2. 一个简单可参考的API网关架构设计

    网关一词较早出现在网络设备里面,比如两个相互独立的局域网段之间通过路由器或者桥接设备进行通信, 这中间的路由或者桥接设备我们称之为网关. 相应的 API 网关将各系统对外暴露的服务聚合起来,所有要调用 ...

  3. LeetCode--125--验证回文串

    问题描述: 好 times out: class Solution(object): def isPalindrome(self, s): """ :type s: st ...

  4. Vue组件(知识)

    form最后一节. 组件基础 组件的复用:  data必须是函数 组织 通过Prop向子组件传递data 单个根元素 通过event向父组件发送消息: 使用事件抛出一个value, 在组件上用v-mo ...

  5. RAC配置(启停库)

    关库顺序 :先关闭数据库 然后关闭节点资源 [root@rac1 ~]# srvctl stop   database  -d 数据库名[root@rac1 ~]# srvctl stop   ins ...

  6. POJ 1442 splay

    前几天用treap写了这一题,不过treap支持的操作不如splay的多,作为一个完美主义者,重新用splay写了这一题. splay大部分操作可以通过 强大到无与伦比的数据结构splay-tree  ...

  7. win10激活工具---KMSAutoNet

    win10激活工具---KMSAutoNet 1> 2> 3> 4> 5> 6> 8>

  8. 微信公众号平台开发(二)信息的分类.md

    在上一篇博客中,我们只是简单地与微信服务器建立了连接,接下来就是从微信服务器中接收信息了.在SecurityController中,我定义了两个方法(get和post).Get方法是我们用来与微信服务 ...

  9. @RunWith和 SpringJUnit4ClassRunner ---->junit4和Spring一起使用

    今天在看Spring的Demo的时候,看到了如此单元测试的写法 如下: @RunWIth(SpringJunit4ClassRunner.class) @ContextConfiguration(lo ...

  10. Activiti进阶(二)——部署流程资源的三种方式

    转自:http://blog.csdn.net/zjx86320/article/details/50234707 流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被读取.下面介绍常用的 ...