ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java中为什么要使用迭代器

2020-03-08 12:05:56  阅读:217  来源: 互联网

标签:为什么 遍历 java 角色 迭代 容器 算法 内部


简而言之,集合的遍历如果用for来进行的话,需要知道集合的内部构造,想遍历数组的时候一样,需要索引有序。但是例如set集合是无序的,使用for遍历不了。这时需要迭代器来遍历,把集合中所有的元素都找出来。

 

 

迭代器(Iterator)模式,又叫做游标(Cursor)模式。迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需暴露该对象的内部细节。

从定义可见,迭代器模式是为容器而生。  很明显,对容器对象的访问必然涉及到遍历算法。你可以将遍历方法写到容器对象中去(内部迭代器);或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧(外部迭代器)。这两种情况好像都能够解决问题。 然而在前一种情况,容器承受了过多的功能,它不仅要负责自己“容器”内的元素维护(添加、删除等等),而且还要提供遍历自身的接口;而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历。第二种方式倒是省事,却又将容器的内部细节暴露无遗。   

而迭代器模式的出现,很好的解决了上面两种情况的弊端。

由于迭代器模式本身的规定比较松散,所以具体实现也就五花八门。我们先来列举下迭代器模式的实现方式。  

1.迭代器角色定义了遍历的接口,但是没有规定由谁来控制迭代。在Java collection的应用中,是由客户程序来控制遍历的进程,被称为外部迭代器;
还有一种实现方式便是由迭代器自身来控制迭代,被称为内部迭代器。
外部迭代器要比内部迭代器灵活、强大,而且内部迭代器在java语言环境中,可用性很弱

2.在迭代器模式中没有规定谁来实现遍历算法。好像理所当然的要在迭代器角色中实现。因为既便于一个容器上使用不同的遍历算法,也便于将一种遍历算法应用于不同的容器。
但是这样就破坏掉了容器的封装——容器角色就要公开自己的私有属性,在java中便意味着向其他类公开了自己的私有属性。  
那我们把它放到容器角色里来实现好了。这样迭代器角色就被架空为仅仅存放一个遍历当前位置的功能。
但是遍历算法便和特定的容器紧紧绑在一起了。  
而在Java Collection的应用中,提供的具体迭代器角色是定义在容器角色中的内部类。
这样便保护了容器的封装。但是同时容器也提供了遍历算法接口,你可以扩展自己的迭代器。

标签:为什么,遍历,java,角色,迭代,容器,算法,内部
来源: https://www.cnblogs.com/Spartaheart/p/12441646.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有