Iterator就是迭代器的意思。

Iterator是一个接口,利用迭代器主要是获取元素,很少删除元素。有三个方法:
    1)hasNext():判断是否有更多的元素,如果有返回true。
    2)next():在hasNest()的判断下,如果有更多的元素,就返回下一个元素。
    3)Remove() 删除所返回的上一个元素。(可选操作)至少要返回一次才能删除元素。也就是说如果上一个元素都没有,那么怎么能删除呢?那不是要出现异常了吗? 
具体操作:
    1)定义一个Iterator类型的变量it,在集合框架当中Collection提供了一个方法iterator(),可以返回一个迭代器。只要是间接继承或者直接继承Collection的都有这个方法。所以可以用ArrayList的一个对象al去返回一个迭代器。

使用Iterator获得元素:

代码

import java.util.Arrays;
import java.util.Iterator;
import java.util.List; public class ArrayListTest {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(new Point(1, 2));
al.add(new Point(5, 2)); Iterator it = al.iterator();
while (it.hasNext()) {// 判断是否有更多的元素,
System.out.println(it.next());// 那么就循环打出。
}
}
}

使用Iterator删除元素:

由于Iterator开始的时候是指向第一个元素之前的,因此如果你要删除第一个元素,那么就要让它将指针向下移动一下

public class ArrayListTest {
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(new Point(1, 2));
al.add(new Point(5, 2)); Iterator it = al.iterator();
it.next(); // 先要获得元素。由于第一次用,那么就是得到的第一个元素。
it.remove();// 然后才能删除所获得的元素。
while (it.hasNext()) {
System.out.println(it.next());
}
}
}

Array.asList(Object[] obj)将一个对象数组转换成一个列表返回,返回一个固定尺寸的列表,不能向列表当中增加或减少元素。列表当中的元素列表返回的迭代器不支持remove()方法,因为remove方法就是减少了元素,改变了列表的固定尺寸。

迭代器的作用:我们观察到不使用迭代器也可以获得列表当中的元素,那为什么还要用呢? 因为有的集合类(比如Set)没有提供get()操作,那么这时迭代器就可以发生作用了。更重要的作用是它提供了一种通用的方式去访问集合中的元素。 
Collection 提供了一个方法Iterator<E> iterator()
返回在此 collection 的元素上进行迭代的迭代器。凡是继承自Collection或者Collection间接的实现类都有这样的一个方法。

【一个通用的遍历元素方法:】

public static void printElement(Collection c) {
/*
* 参数类型是Collection,那么只要是它的派生类或者间接实现类的对象都可以
* 作为参数传递进来,作为编写程序的人员来说就不需要针对某一种特定类型的集合
* 类而编写一个迭代,再打印,这样很麻烦。要用迭代器的时候直接调用这个
* 方法就ok。
*/
Iterator i = c.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}

使用迭代器遍历和删除集合中的元素:

package com.collection;

import java.util.Collection;
import java.util.Iterator; public class IteratorTest {
/**
* 打印集合中的元素
*
* @param c
*/
public static void printElements(Collection<?> c) { // 定义一个Iterator类型的变量it
// Iterator java.util.Collection.iterator()返回一个集合的迭代器
Iterator<?> it = c.iterator(); // boolean java.util.Iterator.hasNext()
// Returns true if the iteration has more elements
while (it.hasNext()) {
// Returns the next element in the iteration.
System.out.println(it.next());
}
} /**
* 删除一个元素。
*
* @param c
*/
public static void deleteElements(Collection<?> c) { Iterator<?> it = c.iterator(); // 删除元素之前应该首先调用next()方法。
it.next(); // void java.util.Iterator.remove()
// 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
it.remove();
}
}

转至Meng72

http://www.cnblogs.com/meng72ndsc/archive/2010/12/22/1914201.html

Iterator<转>的更多相关文章

  1. 设计模式(十):从电影院中认识"迭代器模式"(Iterator Pattern)

    上篇博客我们从醋溜土豆丝与清炒苦瓜中认识了“模板方法模式”,那么在今天这篇博客中我们要从电影院中来认识"迭代器模式"(Iterator Pattern).“迭代器模式”顾名思义就是 ...

  2. 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

    最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...

  3. [LeetCode] Flatten Nested List Iterator 压平嵌套链表迭代器

    Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...

  4. [LeetCode] Peeking Iterator 顶端迭代器

    Given an Iterator class interface with methods: next() and hasNext(), design and implement a Peeking ...

  5. [LeetCode] Zigzag Iterator 之字形迭代器

    Given two 1d vectors, implement an iterator to return their elements alternately. For example, given ...

  6. [LeetCode] Binary Search Tree Iterator 二叉搜索树迭代器

    Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ...

  7. 用vue.js学习es6(六):Iterator和for...of循环

    一.Iterator (遍历器)的概念: 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只 要部署Iterator接口,就可以完成遍历操 ...

  8. [转]使用Enumeration和Iterator遍历集合类

    原文地址:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526268.html 前言 在数据库连接池分析的代码实例中,看到其中使用Enume ...

  9. 14 Iterator和for...of循环

    Iterator和for...of循环 首先 Iterator 是一个接口. 标准是 function makeIterator(array) { var nextIndex = 0; return ...

  10. JAVA中ListIterator和Iterator详解与辨析

    在使用Java集 合的时候,都需要使用Iterator.但是java集合中还有一个迭代器ListIterator,在使用List.ArrayList. LinkedList和Vector的时候可以使用 ...

随机推荐

  1. C#文件和文件文件夹按时间、名称排序-顺序与倒序

    对于文件和文件夹有多种排序方式,常用的就是按创建或修改时间.按文件名排序.在 C# 中,按时间和文件名排序都十分简单,用数组提供的排序方法 Array.Sort() 一行代码就可以搞定,当然也可以用常 ...

  2. Lenovo GTX960M 配置CUDA

    文章是出自我的原创,是写在新浪博客里面的:http://blog.sina.com.cn/s/blog_13b7eb5b20102wvxw.html 首先,软件的版本你选择很重要,我们配置了两天才成功 ...

  3. 蓝牙技术BlueTooth

    转载网址:http://blog.csdn.net/dxdxsmy/article/details/7790568 蓝牙核心架构概念的理解请参考上面的网址.

  4. MVC4/5+jquery+bootstrap样式+dataTables+linq+WCF+EF6后台和前台的框架集合!好蛋疼哦!数据库支持MYSQL 和MSSQL,oracle。集成腾讯企业邮箱收邮件同步用户SSO登陆等功能。

    花费了我好多心血,才做出来,下个项目准备用这个框架! 大家有没有做这方面的可以交流一下! 花费了我好多心血,才做出来,下个项目准备用这个框架! 大家有没有做这方面的可以交流一下! 花费了我好多心血,才 ...

  5. 第一章 Javscript的数据类型

      任何编程语言,都会讲到数据类型,那么我在这里也简述下Js的数据类型,在js里判断一个变量的数据类型用typeof() 简单数据类型undefined: 代表一切未知的事物,啥都没有,无法想象,代码 ...

  6. MVC 依赖注入

    本人主要是写给我自己看的,文章没有过多的解释,只留下步骤. 目的:面向接口编程,做到低耦合,高内聚 1.利用Nuget 管理工具,安装Ninject. 2.随便新建一个接口和一个实现类,我在此项目中是 ...

  7. 怎样将SQL Azure数据库备份到本地或者Storage

    怎样备份SQL Azure数据库到本地或者云存储Storage,可以使用SQL Database Import Export 的功能. 具体操作如下: 用SSMS链接SQL Azure数据库 注意:服 ...

  8. 学习之路三十二:VS调试的简单技巧

    这段时间园子里讲了一些关于VS的快捷键以及一些配置技巧,挺好的,大家一起学习,一起进步. 这段时间重点看了一下关于VS调试技巧方面的书,在此记录一下学习的内容吧,主要还是一些比较浅显的知识. 1. 调 ...

  9. Javascript基础系列之(六)循环语句(do while循环)

    do/while 循环是 while 循环的变体.该循环会执行一次代码块,在检查条件是否为真之前,然后如果条件为真的话,就会重复这个循环. 语法结构如下 do { statement } while ...

  10. 【RSYSLOG】rsyslog作为日志采集器安装配置说明

    RSYSLOG is the rocket-fast system for log processing. About 由于环境基于CentOS 6.7 x64,rsyslog本身就是OS的组件,由于 ...