java实现一个迭代器_Java编程Iterator迭代器设计原理及实现代码示例-程序员宅基地

技术标签: java实现一个迭代器  

Java编程Iterator迭代器设计原理及实现代码示例

发布于 2020-4-18|

复制链接

摘记: 我们知道迭代器(Iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素。那么Iterator迭代器的设计原理是什么呢?迭代器问什么定义了一个借口,而不是一个类呢?

我们假设迭代器迭代数据的功能定义为了一个类,那么,会有这样的问题。不同的集合,由于数据结构不一样,所以他们的存储方式也是不一样的。也就是说,迭代器 ..

我们知道迭代器(Iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素。那么Iterator迭代器的设计原理是什么呢?迭代器问什么定义了一个借口,而不是一个类呢?我们假设迭代器迭代数据的功能定义为了一个类,那么,会有这样的问题。不同的集合,由于数据结构不一样,所以他们的存储方式也是不一样的。也就是说,迭代器获取的时候,获取的方式是变化的,也就是不固定的。所以把这种方式定义为具体的实现是不合理的。

无论何种集合,他们肯定都有获取的功能,而且不知道什么时候就没有数据了。所有他们也会有判断功能。于是,就把判断和获取功能抽取出来,定义在接口中。这样的话,将来无论是哪种集合在遍历的时候,它们自己只要去实现迭代器接口即可。

那具体怎么实现的呢?集合迭代器是以内部类的方式实现的。简单看一段代码。

```java

package me.socketthread;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class IteratorDemo {

public static void main(String[] args) {

//创建对象

Collection c = new ArrayList();

//添加元素

c.add("hello");

c.add("world");

c.add("helloworld");

//遍历集合对象,通过集合对象调用方法c.iterator()得到迭代器对象Iterator

Iterator it = c.iterator(); //返回的是Iterator的子类对象,多态。

while (it.hasNext()) { //检查序列中是否还有元素

//System.out.println(it.next());

String s =(String)it.next();//获得序列中的下一个元素

System.out.println(s);

}

}

}

```

输出

```plain

hello

world

helloworld

```

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_28932617/article/details/114833781

智能推荐

Ansys Electronics suite 2020 R2 (HFSS)安装后无法注册Reg_ansysedit.exe, HFSS安装后无法启动。_hfsshfss 安装最后报错 reg ansysedt.exe: error 3221227010-程序员宅基地

文章浏览阅读1.3w次,点赞12次,收藏14次。Ansys Electronics suite 2020 R2 (HFSS)安装后无法注册Reg_ansysedit.exe, HFSS安装后无法启动。安装完成后,提示ConfigureThisMachine错误,提示reg_ansysedit.exe: ERROR: Error 3221226356或者3221227010。导致问题的原因:Windows10的KB4571756更新。解决方案:1、删除该更新2、在系统环境变量中添加:ANSYS_EM_DONOT_PRELOAD_3DDRIVER_D_hfsshfss 安装最后报错 reg ansysedt.exe: error 3221227010

是的,你没有看错,我给Apache顶级项目提了个Bug-程序员宅基地

文章浏览阅读240次,点赞5次,收藏5次。面试题文档来啦,内容很多,485页!由于笔记的内容太多,没办法全部展示出来,下面只截取部分内容展示。

拔掉数据库的电源会怎样?阿里云数据库新型灾备架构,让云端容灾有“备”无患_阿里云为什么断电也能用-程序员宅基地

文章浏览阅读1k次。拔掉数据库的电源会怎样?假设我们拔掉数据库的电源会怎样?在日前举行的阿里云“企业级”云灾备解决方案发布会上,阿里云智能技术战略总监陈绪就来了一场现场“断电”演示,拔掉了数据库的电源。(直播回放:https://yq.aliyun.com/live/1104/event)猜猜现场发生了什么?数据丢失,业务瘫痪,企业资金受损?企业级云灾备解决方案 实时大屏上述情况..._阿里云为什么断电也能用

Springboot计算机毕业设计微信小程序的超市购物平台【附源码】开题+论文+mysql+程序+部署-程序员宅基地

文章浏览阅读457次,点赞15次,收藏9次。通过深入研究消费者的购物行为和习惯,设计合理的商品分类体系,提供丰富的商品信息展示方式,并构建完善的用户管理体系,以实现个性化推荐和精准营销。最终,通过本研究的实施,将为消费者提供一个便捷、高效的购物平台,为超市行业带来新的发展机遇。综上所述,本研究内容将围绕微信小程序超市购物平台的商品分类、商品信息展示以及用户管理等功能展开,力求打造一个功能全面、操作便捷、用户体验优良的购物平台。:如何建立有效的用户管理机制,记录用户的购物行为和偏好,为个性化推荐提供支持,同时确保用户数据的安全性和隐私保护。

TBODY元素详解_tbody下复制一行-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏9次。原文地址:https://www.cnblogs.com/Dlonghow/archive/2008/08/08/1263920.htmlTBODY 元素内包含的有效标签有:TDTHTRTBODY 元素会为全部表格自动定义,就算表格没有显式定义 TBODY 元素。table 对象及其相关的元素有独立的表格对象模型,这与常规对象模型所采用的方法有很大不同。_tbody下复制一行

Android ActivityManagerService总结(三)Activity管理相关数据结构_activitymanager: ted.xu activitystr iscn-程序员宅基地

文章浏览阅读517次。接上一篇文章, 介绍了一下AMS的内部数据结构, ProcessRecord容器,还有四大组件记录表 , 本篇文章继续讲解一下与Activity管理相关的数据结构, 重点关注如下5个类文件:ActivityRecord TaskRecord ActivityStack ActivityStackSupervisor。_activitymanager: ted.xu activitystr iscn

随便推点

ubuntu20.4系统安装CH340驱动并使用串口调试助手-程序员宅基地

文章浏览阅读1.5w次,点赞29次,收藏162次。一、安装CH340驱动1.下载驱动:http://www.wch.cn/download/CH341SER_LINUX_ZIP.html_ubuntu20.4系统安装ch340驱动并使用串口调试助手

C语言实现单链表查找中间值_c++单链表按值查找-程序员宅基地

文章浏览阅读2k次。C语言实现单链表查找中间值主要功能实现代码主要功能创建单链表查看链表查看链表长度查找单链表中间节点的值实现代码#include <stdio.h>#include <stdlib.h>#include <time.h>#define ERROR 0#define OK 1typedef struct Node{ int ..._c++单链表按值查找

nsstring_nsstring *urlstring =-程序员宅基地

文章浏览阅读1.7k次。本文转自http://blog.csdn.net/amdbenq/article/details/7869166/将str的最后一个字符去,如果是存储的汉字,要-2,因为汉字占用2个字节。str = [str substringToIndex:[str length] - 1];//1、创建常量字符串。 NSString *astring = @"Th_nsstring *urlstring =

社会管理网格化 源码_全县首家镇域网格妇联——“和大王”社会治理网格化服务管理中心妇联正式成立!...-程序员宅基地

文章浏览阅读74次。11月15日下午,大王镇社会治理网格化服务管理中心妇女第一次代表大会召开。镇党委组织委员刘传元出席会议,镇社会治理网格化服务管理中心主任孙波涛宣读大王镇网格妇联第一届执委人事安排说明,镇党性教育基地管理服务中心主任、镇妇联主席郭晗宣读批复文件,并代表筹备工作领导小组作筹备报告。全体代表审议通过了大会《大王镇社会治理网格化服务管理中心妇女第一次大会选举办法(草案)》以及总监票人、监票人名单,投票选举..._刘传元 昆明医生

c++全排列的字典序_【基础】字典排序c++代码-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏5次。背景:7-3 输出全排列 (20 分)请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。输入格式:输入给出正整数n(<10)。输出格式:输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序输入样例:3输出样例:123132213231312321#include<c..._【基础】字典排序c++代码

Python 概述_运用python进行应用场景概述与需求分析程序结构-程序员宅基地

文章浏览阅读944次。本文摘抄作为记录, 参考, 切不可照搬照抄的去做.一、Python的应用场景Python用于简单脚本编程,如编写2048小游戏或12306的自动抢票软件;Python用于系统编程,如开发系统应用;Python用于开发网络爬虫;网络爬虫的用途是进行数据采集,也就是将互联网中的数据采集过来。网络爬虫的难点其实并不在于爬虫本身,由于网站方为了避免被爬取回采取各种各样的反爬虫措施,而如果想要继续..._运用python进行应用场景概述与需求分析程序结构

推荐文章

热门文章

相关标签