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

 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. 你真的了解Spring Framework吗?

    Java 框架 上世纪90年代,使用Java开发Web应用普遍使用J2EE标准,J2EE具有平台无关性,对事务.消息等企业级的特性都有很好的支持,但当时的J2EE仍存在一些问题: 非常复杂:EJB的诞 ...

  2. [转]mysql日常工作手记

    1. 给navy加show权限: 1 2 update mysql.user set Show_db_priv='Y'  where user='navy'; flush privileges; 2. ...

  3. hdu-4417-主席树+离线

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. 安装docker CE for CentOS

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

  5. JavaScript学习总结(十四)——JavaScript编写类的扩展方法

    在​J​a​v​a​S​c​r​i​p​t​中​可以使​用​类的p​r​o​t​o​t​y​p​e属性来​扩​展​类的属​性​和​方​法,在实际开发当中,当JavaScript内置的那些类所提供的动态 ...

  6. Cxfreeze使用存在问题

    Cxfreeze使用 cx_Freeze-5.1.1-cp36-cp36m-win_amd64.wh 1● 打包多个文件 Cxfreeze D:/test.py –target-dir D:/   c ...

  7. 071——VUE中vuex之使用getters计算每一件购物车中商品的总价

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. httpclient httpclient连接回收

    httpclient连接释放 httpClient必须releaseConnection,但不是abort.因为releaseconnection是归还连接到到连接池,而abort是直接抛弃这个连接, ...

  9. [转载]JS浏览器兼容性问题

    from:http://dada-fangfang.iteye.com/blog/811749 做BS开发就难免会用到javascript,而每个浏览器对javascript的支持有不同.这就需要我们 ...

  10. Jena解析rdf、nt、ttl格式数据

    比如有一个ttl格式的文件名为cco.ttl package com.jena; import java.io.InputStream; import com.hp.hpl.jena.rdf.mode ...