目录:

  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 == -)

    throw new IllegalStateException();

            checkForComodification();

      try {

    AbstractList.this.remove(lastRet);

    if (lastRet < cursor)

        cursor--;

    lastRet = -;

    expectedModCount = modCount;

      } catch (IndexOutOfBoundsException e) {

    throw new ConcurrentModificationException();

      }

  }

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

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

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

IEnumerable类

public interface IEnumerable

{

    [DispId(-), __DynamicallyInvokable]

    IEnumerator GetEnumerator();

}

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

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

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

深入剖析java迭代器以及C#迭代器!的更多相关文章

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

    迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 迭代器模式的角色构成 (1)迭代器角色(Iterator):定义遍历元素所需 ...

  2. 【转】Java学习之Iterator(迭代器)的一般用法 (转)

    [转]Java学习之Iterator(迭代器)的一般用法 (转) 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭 ...

  3. java集合类中的迭代器模式

    不说模式的问题,看一个<<设计模式之禅>>里面的例子. 老板要看到公司了各个项目的情况.(我知道我这个概述很让人头大,看代码吧) 示例程序 v1 package Iterato ...

  4. Java基础 -- 深入理解迭代器

    在Java基础 -- 持有对象(容器)已经详细介绍到,集合(Collection)的种类有很多种,比如ArrayList.LinkedList.HashSet.... 由于集合的内部结构不同,很多时候 ...

  5. Java中的集合迭代器

    集合的迭代器 任何集合都有迭代器. 任何集合类,都必须能以某种方式存取元素,否则这个集合容器就没有任何意义. 迭代器,也是一种模式(也叫迭代器模式).在java中它是一个对象,其目的是遍历并选中其中的 ...

  6. 《JAVA设计模式》之迭代器模式(Iterator)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...

  7. Java——Collection集合、迭代器、泛型

    集合 ——集合就是java提供的一种容器,可以用来存储多个数据. 集合和数组的区别 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. 集合存储的都是对象 ...

  8. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

  9. Java设计模式8:迭代器模式

    迭代器模式 迭代器模式又叫做游标(Cursor)模式,其作用是提供一种方法访问一个容器元素中的各个对象,而又不暴露该对象的内部细节. 迭代器模式结构 迭代器模式由以下角色组成: 1.迭代器角色 负责定 ...

  10. [转载]《STL源码剖析》阅读笔记之 迭代器及traits编程技法

    本文从三方面总结迭代器   迭代器的思想   迭代器相应型别及traits思想   __type_traits思想 一 迭代器思想 迭代器的主要思想源于迭代器模式,其定义如下:提供一种方法,使之能够依 ...

随机推荐

  1. NYOJ--32--SEARCH--组合数

    按照思路写:深搜,r控制位数,位数为0输出否则递归 /* Name: NYOJ--32--搜索--组合数 Date: 14/04/17 16:48 Description: 深度优先搜索 */ #in ...

  2. 【模板】51Nod--1085 01背包

    在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1行,2个整数 ...

  3. 安徽省2016“京胜杯”程序设计大赛_J_YZK的大别墅

    YZK的大别墅 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 24 Accepted: 12 Description 土豪 ...

  4. 脱壳练习之bitarts 5.0

    运行界面 一开始不是PUSHAD,这里我们跟到PUSHAD指令处,按F7执行该指令,接着在寄存器窗口中定位到ESP寄存器的值,在其上面单击鼠标右键选择-Follow in Dump. 仅允许非商业转载 ...

  5. python enumerate 枚举函数用法

    enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...

  6. 搭建ElasticSearch+MongoDB检索系统

    ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...

  7. HDU 6006 Engineer Assignment:状压dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6006 题意: 在Google中,有个n项目,m个专家.第i个项目涉及c[i]个领域,分别为a[i][0 ...

  8. ThinkSNS积分商城系统功能详解!

    积分商城含PC端.Android APP.iOS APP:在ThinkSNS PC端首页导航栏点击"拓展功能",然后选择"积分商城"进行体验:APP端则是在&q ...

  9. pyhton购物程序

    要求: 启动程序后,让用户输入工资,然后打印出带有序号的商品列表 用户输入商品序号购买相应的商品,或者输入 ' q ' 退出购买界面 选择商品后,检查余额是否足够,够则直接扣款,不够则提示余额不足 用 ...

  10. MySQL数据库 —子查询,联合查询

    一 使用IN关键字的子查询 1.查询游戏类型是'棋牌类' 的游戏的分数信息 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以这一组编 ...