目录:

  1. 知道迭代器接口Iterable
  2. 为什么java的for增强可以自动迭代
  3. 那些类可以被迭代
  4. 通过什么方法迭代

1.知道迭代器接口Iterable

解析: 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。

2.为什么javafor增强可以自动迭代

解析:for增强只能迭代实现了Iterable接口的类,并且自动调用该类中的iterator()方法;

3.那些类可以被迭代?

解析:只要该类实现了Iterator接口或者继承的父类实现了Iterator接口,就可以被迭代.

4.通过什么方法迭代

解析:因为Iterable接口中只有一个方法:iterator(),这个方法的返回值就是Iterator<T>;而Iterator接口中又定义了三个方法,分别是:hasNext,next,remove

这三个方法分别代表为

  1. hasNext();方法
public boolean hasNext() {return cursor != size();}

对比帧数,当调用hasNext方法的时候,跟元素个数size()进行对比,如不等于size()的时候,return true;

2. next();方法

public E next() {checkForComodification();try {E next = get(cursor);lastRet = cursor++;return next;} catch (IndexOutOfBoundsException e) {checkForComodification();throw new NoSuchElementException();}}

当hasNext()方法执行完毕后,系统自动调用next()方法,读取下一条数据;

cursor//当前元素的索引.

E next = get(cursor);//根据当前索引,获取值

lastRet = cursor++;//索引+1;

3. remove();方法

public void remove() {if (lastRet == -1)throw new IllegalStateException();checkForComodification();try {AbstractList.this.remove(lastRet);if (lastRet < cursor)cursor--;lastRet = -1;expectedModCount = modCount;} catch (IndexOutOfBoundsException e) {throw new ConcurrentModificationException();}}

当前方法的操作:当调用这个方法的时候,删除当前元素并且让cursor赋值为上一个,并且让lastRet改为-1,方便下次调用.

checkForComodification();此方法用来判断创建迭代对象的视乎List的modCount与现在List的modCount是否一样,不一样的话就报出ConcurrentModificationException()异常

java的迭代器就先剖析到这里,接下来我们看看C#的迭代器.

IEnumerable类

public interface IEnumerable{[DispId(-4), __DynamicallyInvokable]IEnumerator GetEnumerator();}

IEnumerator类中,和java大致是一样的,因为它也有三个方法:分别是

bool MoveNext();//就和java中的hasNext()方法大概一致
object Current { [__DynamicallyInvokable] get; }//它和java中next()方法差不多,
void Reset();//它就是java中的remove方法. 

也可以说,java的迭代器,是从C#借鉴来的,所以他俩的代码都差不多一个概念.

转载于:https://www.cnblogs.com/zhuangbiing/p/4911846.html

深入剖析java迭代器以及C#迭代器!相关推荐

  1. 深度剖析Java数据结构之迭代器(Iterator)

    一.什么是迭代器 我们知道,JVM是用C/C++编写的.在百度百科中,迭代器是解释是迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定 ...

  2. java for 迭代器_Java基础-迭代器Iterator与语法糖for-each

    迭代器Iterator与语法糖for-each 一.为什么需要迭代器 设计模式迭代器 迭代器作用于集合,是用来遍历集合元素的对象.迭代器不是Java独有的,大部分高级语言都提供了迭代器来遍历集合.实际 ...

  3. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

  4. java集合迭代器_java集合迭代器

    一.Java中有一个设计模式是迭代器模式 1.迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 2.迭代器模式概述 Java集 ...

  5. java迭代例子_Java 迭代器的代码实例详解

    一.摘要 迭代器模式是与集合共生共死的.一般来说,我们只要实现一个容器,就需要同时提供这个容器的迭代器.使用迭代器的好处是:封装容器的内部实现细节,对于不同的集合,可以提供统一的遍历方式,简化客户端的 ...

  6. C++、Java、JavaScript中迭代器的用法

    编程思想之迭代器 什么是迭代器? 迭代器(Iterator)是按照一定的顺序对一个或多个容器中的元素从前往遍历的一种机制,比如for循环就是一种最简单的迭代器,对一个数组的遍历也是一种的迭代遍历的过程 ...

  7. Java设计模式系列之——迭代器模式

    本篇我们采取倒叙的手法来讲解迭代器模式,先看下面一段我们在平时工作中常见的代码: package com.mazhichu.designpatterns.iterator;import java.ut ...

  8. Java 设计模式之【迭代器】学习与掌握

    文章目录 定义 优点 缺点 模式的结构与实现 模式的结构 模式的实现 应用场景 定义 提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示. 迭代器模式是一种对象行为型模式 优点 ...

  9. java enumerator_Enumerator迭代器和Iterator迭代器区别

    Enumerator迭代器和Iterator迭代器区别 Iterator也是一个接口,它的源码如下:package java.util; public interface Iterator { boo ...

  10. Java中的Iterator(迭代器)

    Java中的Iterator(迭代器) 1 概述 ​ Java Iterator不是一个集合,是一种用于访问集合的方法,可用于迭代ArrayList和HashSet等集合.Iterator是Java迭 ...

最新文章

  1. SQLite基本操作
  2. Python批量修改文件格式
  3. C与C++在const用法上的区别
  4. java 网络驱动器_删除多余的网络驱动器
  5. SPRING IN ACTION 第4版笔记-第二章-002-@ComponentScan、@Autowired的用法
  6. UE4 远程调用函数
  7. or函数 java_Java OptionalInt orElseGet()用法及代码示例
  8. centos7 安装webmin
  9. vue.js+webpack 为 img src 赋值的路径问题解决方法
  10. [InnoDB系列] - InnoDB释放表空间
  11. Python策略模式实现源码分享
  12. TP5报错variable type error: array
  13. Mybatis-plus 多表联查实现(非手写sql)
  14. 移动WebApp开发 JS框架对比
  15. TPU 使用TPU训练tensorflow初探(Colab)
  16. 纺织服装产业实现智能制造升级
  17. 知乎万赞:什么样的程序员在35岁以后依然被公司抢着要?打破程序员“中年危机”
  18. Activity跳转后自动执行了onDestroy
  19. 高炉煤气净化提质技术及发展趋势浅谈
  20. 防火墙(ASA)的基本配置与远程管理

热门文章

  1. 在 k8S 中搭建 SonarQube 7.4.9 版本(使用 PostgreSQL 数据库)
  2. Git 更改远程地址
  3. macOS下JetBrains配置修改错误导致无法启动解决方案
  4. el-input输入值无法在输入框显示
  5. Tomcat无响应问题
  6. SpringMVC:400 Bad Request
  7. Chrome浏览器导出插件crx
  8. INS-13001环境不满足最低要求
  9. Win10 Ubuntu子系统(内嵌ubuntu18.04)运行32bit Linux原生程序 解决Exec format error错误
  10. 【codevs1073】家族