目录:

  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. 勤快的love枫[ZJOI2007]

    题目描述 小绝恋love 枫是一个出纳,经常需要做一些统计报表的工作.今天是绝恋love 枫的生日,小绝恋love 枫希望可以帮爸爸分担一些工作,作为他的生日礼物之一.经过仔细观察,小绝恋love 枫 ...

  2. springMVC两种方式实现多文件上传及效率比较

    springMVC实现 多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实 现多文件上传效率上却有着很大的 ...

  3. Spring @Transactional 使用

    Spring @Transactional是Spring提供的一个声明式事务,对代码的侵入性比较小,只需考虑业务逻辑,不需要把事务和业务搞混在一起. @Transactional 可以注解在inter ...

  4. akoj-1074-人见人爱A^B

    人见人爱A^B Time Limit:1000MS  Memory Limit:65536K Total Submit:91 Accepted:55 Description 求A^B的最后三位数表示的 ...

  5. mybatis 详解(八)------ 懒加载

    本章我们讲如何通过懒加载来提高mybatis的查询效率. 本章所有代码:http://pan.baidu.com/s/1o8p2Drs 密码:trd6 1.需求:查询订单信息,有时候需要关联查出用户信 ...

  6. python_装饰器_语法糖

    什么是高阶函数? -- 把函数名当做参数传给另外一个函数,在另外一个函数中通过参数调用执行 #!/usr/bin/python3 __author__ = 'beimenchuixue' __blog ...

  7. 前端开发之JavaScript篇

    一.JavaScript介绍  前端三剑客之JavaScript,简称js,可能是这三个里面最难的一个了.很早以前,市面上流通着三种js版本,为了统一,ECMA(欧洲计算机制造协会)定义了规范的版本, ...

  8. HTML5基本标签

    一.HTML5文档类型说明  二.head部分-基本标签1.<head>标签head中主要放关于网页设置的相关语句.   2.<title>标签  3.<link> ...

  9. Lenovo T440p 外放没有声音

    背景:Lenovo T440p,今天突然想听会歌 外放竟然没声音,fuck!!! 任务栏声音图标也没有静音标志. 驱动出问题了?检查下驱动,正常. 找了耳机试下,正常,看来驱动真的没问题. 喇叭坏了? ...

  10. U3D学习入门

    U3D最重要的五大界面 第一:场景(Sence),构建游戏的地方: 第二:层级(Hierarchy),场景中的游戏对象都列在这里. 第三:检测面板(Inspector),当前选中的资源或对象的设置,是 ...