概述
在进行数据结构的遍历时,你是否对采用最原始的方法,使用一个for循环,将所有的元素慢慢遍历感到厌烦?
幸运的是这里有一个更加简单的途径:部署Iterator接口
我们在创建赫夫曼编码时,使用到了Iterator,大家可能比较陌生,但在此处它的用途只是:
为实现数据结构的遍历操作
下面,本文整理一下Iterator的用法:
一、概述
1.1 Iterator是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作
1.2 使用next()获得序列中的下一个元素(注意:第一次调用Iterator的next()方法时,它返回序列的第一个元素)
1.3 每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。
1.4使用hasNext()检查序列中是否还有元素。
1.5使用remove()将迭代器新返回的元素删除。
1.6 有一些数据结构已经具备了Iterator接口:
数组
某些类似数组的对象
Set和Map结构。
其他数据结构(主要是对象)的Iterator接口,都需要自己 Symbol.iterator属性上面部署,这样才会被for…of循环遍历
1.7. 部署Iterator接口后,这时对象实际上被当作Map结构使用
二:Iterator原理:java迭代器
Iterator是Java迭代器最简单的实现,只能单向移动,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
迭代使用方法:(迭代其实可以简单地理解为遍历,是一个标准化遍历各类容器里面的所有对象的方法类)
for(Iterator it = c.iterator(); it.hasNext(); ) {
Object o = it.next();
//do anything
}
三:Iterator与泛型搭配
Iterator对集合类中的任何一个实现类,都可以返回这样一个Iterator对象。可以适用于任何一个类。
因为集合类(List和Set等)可以装入的对象的类型是不确定的,从集合中取出时都是Object类型,用时都需要进行强制转化,这样会很麻烦。
用上泛型,就是提前告诉集合确定要装入集合的类型,这样就可以直接使用而不用显示类型转换.非常方便.
四: 使用for循环与使用迭代器iterator的对比
如果采用ArrayList,随机访问比较快,因为for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快
而采用LinkedList则是:顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快
概括就是:for循环适合访问顺序结构,可以根据下标快速获取指定元素.
而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的.可以访问没有顺序的集合.
一般情况下,对于遍历元素,推荐大家使用Iterator,
它的好处在于不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口)
例如:如果使用 Iterator 来遍历集合中元素,一旦不再使用 List 转而使用 Set 来组织数据,那遍历元素的代码不用做任何修改,而如果使用 for 来遍历,那所有遍历此集合的算法都得做相应调整,因为List有序,Set无序,结构不同,访问算法也得调整。
最后
以上就是怕黑汉堡为你收集整理的Iterator原理简述及于for循环的对比的全部内容,希望文章能够帮你解决Iterator原理简述及于for循环的对比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复