迭代器Iterator的底层实现原理
第一步:没有接口的迭代器简单实现原理
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的底层实现原理的更多相关文章
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)
HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- Map的底层实现原理
一,前言 1.1,概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射(K-V).Java提供了专门的集合类用 ...
- HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算h ...
- Python的迭代器(iterator)和生成器(constructor)
一.迭代器(iterator) 1.迭代器的概述 在Python中,for循环可以用于Python中的任何类型,包括列表.元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器 迭代器 ...
- C++迭代器 iterator【转】
1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型.(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter ...
- 迭代器 Iterator
迭代器 Iterator 2016-5-7 可以这样说,迭代器统一了对容器的访问方式. 考虑这样的情景:原本是对着List编码,但是后来发现需要把相同的代码用于Set.我们需要一种不关心容器类型 而能 ...
- Python中生成器generator和迭代器Iterator的使用方法
一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...
- (转)HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别
①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算h ...
随机推荐
- 移动开发基础和Dalvik VM
移动开发基础和Dalvik VM 1.基础 移动开发:是指以PDA.UMPC等便携终端为基础进行的开发工作. PDA:Person Digital Assistant 个人数码助理 UMPC:Ultr ...
- mac外接显示器 双屏同时滑动问题
问题:mac pro 外接一个显示器,用四个手指横向切换屏幕的时候,外接的显示器也一起跟着动了 解决:
- Prefix Product Sequence CodeForces - 487C (数论,构造)
大意: 构造一个[1,2,...n]的排列, 使得前缀积模n为[0,1,...,n-1]的排列 这种构造都好巧妙啊, 大概翻一下官方题解好了 对于所有>=6的合数$n$, 有$(n-1)! \e ...
- python-day9-集合数据类型
pythons=['alex','egon','yuanhao','wupeiqi','gangdan','biubiu']linuxs=['wupeiqi','oldboy','gangdan'] ...
- Oracle EBS供应商接口导入(转)
原文地址 Oracle EBS供应商接口导入 1.供应商导入组成供应商导入主要分为供应商头信息导入.供应商地点信息导入.供应商联系人导入三个部分的信息,其他按实际需求进行添加.供应商头信息导入:导入供 ...
- Oracle DISTINCT A 排序问题(转)
请问Oracle 中有ID,A栏要怎么读出栏的不重复值,并且用ID来排序,請大家帮帮忙? 解决方案: ID | A 1 | x 2 | y 3 | x A栏的不重复值: x, y 但用ID來排序时 x ...
- AIX5L内存监控和调整
1.ps ps gv | head -n 1; ps gv | egrep -v "RSS" | sort +6b -7 -n -r PID TTY STAT ...
- HDU 1934 特殊数字
有两种车牌号.让你判断第二种是不是在第一种之后且在第一种出Kth之前的车牌号. 本解中是把前面的字母看成一位十进制的数.自己是一个26或者21进制的数.如果比较时有两种.那么第一种和第一种的最后一个比 ...
- 快速切题 sgu119. Magic Pairs
119. Magic Pairs time limit per test: 0.5 sec. memory limit per test: 4096 KB “Prove that for any in ...
- kettle使用命令行来运行ktr和kjb
1:cmd方式运行 1.ktr的运行:运行transformation文件是通过Pan.bat来运行的. 打开cmd命令行窗口,转到Pan.bat所在的目录,如d:\data-integration, ...