首页 / 知识
关于oop:Java中Iterator接口的好处是什么?
2023-04-16 23:44:00

What are the benefits of the Iterator interface in Java?
我刚刚了解了Java Collections Framework如何在链表中实现数据结构。 据我了解, 从Java网站:链接文本
我尝试在Google上四处搜寻,但似乎找不到确切的答案。 有人可以阐明Sun为什么选择使用它们吗? 是因为设计更好吗? 增加安全性? 好的OO实践? 任何帮助将不胜感激。 谢谢。
因为它支持允许客户端程序员迭代任何种类的集合的基本操作(请注意:不一定是
它们是,它们只是标记为"私人",因此您无法进入它们并与它们混为一谈。进一步来说:
对于简单的程序,这似乎都不值得。但是,使它们有用的那种复杂性很快就会浮现出来。 您会问:"为什么方法hasNext(),next()和remove()没有直接编码到数据结构实现本身?"。
Java Collections框架选择将Iterator接口定义为集合本身的外部化接口。通常,由于每个Java集合都实现 将迭代器外部化为其集合可允许客户端控制一个迭代器如何通过集合进行迭代。我可以想到的一个用例是,当一个人拥有一个无限制的集合时,例如Internet上所有要索引的网页。 在经典的GoF书中,非常清楚地阐明了内部和外部迭代器之间的对比。
有关内部迭代器如何工作的示例,请参见Ruby的 重要的是使集合与指针分开。迭代器指向集合中的特定位置,因此不是集合的组成部分。这样,对于一个实例,您可以在同一个集合上使用多个迭代器。 这种分离的不利之处在于,迭代器不知道对其进行迭代的集合所做的更改。因此,您无法更改集合的结构,并且不能期望迭代器在没有"投诉"的情况下继续进行工作。
使用
在此示例中, 换句话说,实现接口是一种面向对象的编程概念,旨在让其他人知道某个类具有它所声称的要具备的功能。
通过具有必须由实现接口的类实现的方法来强制执行此概念。这样可以确保要使用实现
另外,应该指出的是,由于Java没有多重继承,因此可以使用接口来模拟该功能。通过实现多个接口,一个人可以拥有一个类,该类是继承某些功能的子类,并且还可以通过实现一个接口来"继承"另一个功能。一个例子就是,如果我想拥有一个 您可以从什么是接口中阅读有关接口的更多信息。来自Sun的Java教程。 可以同时使用一个插入器的多个实例。将它们作为基础数据的本地游标进行处理。 顺便说一句:优先于具体实现的接口松散耦合 寻找迭代器设计模式,然后在这里:http://en.wikipedia.org/wiki/Iterator 因为您可能要遍历不是数据结构的内容。假设我有一个联网的应用程序,可以从服务器获取结果。我可以围绕这些结果返回一个Iterator包装器,并通过任何接受Iterator对象的标准代码将其流式传输。 将其视为良好MVC设计的关键部分。数据必须以某种方式从模型(即数据结构)到达视图。使用Iterator作为过渡,可以确保永远不会暴露Model的实现。您可能将LinkedList保留在内存中,从解密算法中提取信息或包装JDBC调用。它对视图无所谓,因为视图仅在乎Iterator接口。 最终,因为Iterator捕获了适用于大量数据结构的控件抽象。如果您对类别理论感到满意,那么您可以被这篇论文震惊:迭代器模式的本质。 一篇有趣的论文,讨论了使用迭代器的优缺点: http://www.sei.cmu.edu/pacc/CBSE5/Sridhar-cbse5-final.pdf 我认为这是很好的面向对象的做法。您可以拥有处理各种迭代器的代码,甚至为您提供创建自己的数据结构或仅实现迭代器接口的通用类的机会。您不必担心其背后的实现方式。 只是M2C,如果您不知道的话:在for-each循环就足够的情况下,可以避免直接使用迭代器接口。 迭代器只是添加了遍历项目集合的通用方法。 i.remove()是不错的功能之一,您可以在其中从要迭代的列表中删除元素。如果您只是尝试从列表中正常删除项目,则会产生怪异的效果或引发异常。 该接口就像实现它的所有事物的契约。您基本上是说..保证实现迭代器的所有对象都具有这些行为相同的方法。如果您只想在代码中处理迭代器类型,则还可以使用它来传递迭代器类型。 (您可能不关心列表的类型是什么。您只想传递一个Iterator)您可以将所有这些方法独立地放入集合中,但不能保证它们的行为相同或什至具有相同的名称,并且签名。 好吧,第一个要点似乎允许多线程(或单线程,如果您搞砸了)应用程序,无需为并发冲突而锁定集合。例如,在.NET中,如果没有锁定或继承IEnumerable和重写方法(我们会得到例外),则无法同时枚举和修改集合(或列表或任何IEnumerable)。 迭代器可用于任何种类的集合。它们使您可以针对项目集合定义算法,而与基础实现无关。这意味着您可以处理列表,集合,字符串,文件,数组等。 从现在开始的十年后,您可以将List实现更改为更好的实现,并且该算法仍将针对该无缝运行。 Java Collections Framework中使用了java.util.Iterator接口,以允许在仍循环访问集合的同时对其进行修改。如果您只想对整个集合进行干净的迭代,请使用for-each,但是Iterators的好处是您可以获得以下功能:可选的remove()操作,对于List Iterator接口,它提供了添加功能,甚至更好()和set()操作。这两个接口都允许您遍历集合并同时在结构上进行更改。尝试在使用for-each遍历集合时修改集合会引发ConcurrentModificationException,通常是因为集合被意外修改了! 看一下ArrayList类
它内部有2个私人班级(内部班级) 它们分别实现Iterator和ListIterator接口 公共类ArrayList ..... {//封闭类
}
当您调用方法iterator()和listIterator()时,它们将返回 当您使用Java处理集合时,迭代器非常有用。 使用For-Each循环(Java1.5)遍历集合,数组或列表。 迭代器是Java中可用的许多设计模式之一。设计模式可以被认为是方便的构建块,样式,代码/结构的用法。 要了解有关Iterator设计模式的更多信息,请访问有关Iterator以及许多其他设计模式的网站。这是Iterator网站上的摘录:http://www.patterndepot.com/put/8/Behavioral.html
|
最新内容
相关内容
linux命令查看接口?
linux命令查看接口?,系统,设备,地址,网络,信息,电脑,软件,情况,命令,灵活,linux查看运行的端口命令以下是在Linux系统中查看端口占用情况的几linux界面网络命令?
linux界面网络命令?,网络,工作,地址,系统,信息,命令,目录,管理,标准,状态,使用linux下提供的字符界面来设置网络命令为1、直接修改网络配置文linux命令行界面向上?
linux命令行界面向上?,系统,标准,工作,地址,环境,命令,管理,服务,较大,位置,linux命令有哪些特点linux命令行的特点?1、Linux支持多用户,各个用linux炫酷命令界面?
linux炫酷命令界面?,系统,环境,项目,在线,网络,基础知识,网上,网站,近几年,管理系统,linux怎么进入字符命令界面?打开linux系统,在linux的桌面linux命令界面输入法?
linux命令界面输入法?,系统,工具,信息,第三,软件,输入法,名字,盘后,语言,区域,linux怎么切换输入法1、在运用程序中,您需要找到“系统工具”并linux转为命令界面?
linux转为命令界面?,系统,密码,电脑,软件,界面,图形界面,控制台,终端,命令,模式,linux系统怎么从图形界面进入命令界面?1、Linux命令行模式切linux命令行界面汉化?
linux命令行界面汉化?,系统,标准,软件,网上,管理,工具,电脑,底部,服务,项目,xshell命令行界面怎么显示中文?1、解决方法其实很简单的,即把xshellinux界面输入命令?
linux界面输入命令?,工作,系统,信息,地址,平台,软件,位置,环境,盘中,设计,linux下如何查看软连接?1、,软链接可以理解成快捷方式,也清楚知道原文linux命令行界面翻页?
linux命令行界面翻页?,工具,系统,命令,占比,技术,进程,空格键,模式,文件,字符串,LINUX系统中的TOP命令看进程,怎么翻页看下一页??1、W: 将当前linux命令界面切换?
linux命令界面切换?,密码,系统,终端,信息,状态,环境,地方,电脑,工具,命令,linux切换用户命令1、linux切换用户的命令是“su”。普通用户之间切linux命令遍历月份?
linux命令遍历月份?,系统,工作,命令,基础,信息,管理,工具,目录,标准,网络,Linux常用命令以及解释1、linux常用命令:pwd命令该命令的英文解释为plinux命令行交互界面?
linux命令行交互界面?,系统,密码,状态,终端,信息,工具,环境,情况,首页,界面,linux怎么进入字符命令界面?1、打开linux系统,在linux的桌面的空白