一Iterator接口

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层

结构。迭代器通常被称为"轻量级"对象,因为创建它的代价小。

Java中的迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。可以知道的是,它只是提供了一个

接口,并没有提供真正的Iterator类。Iterator是对collection进行迭代的迭代器。

Iterator接口定义了如下的方法:

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1)使用方法iterator()要求容器返回一个Iterator对象。第一次调用Iterator的next()方法时,它返回序列的第一个元

素。

  (2)使用next()获得序列中的下一个元素。

  (3)使用hasNext()检查序列中是否还有元素,如果仍有元素可以迭代,则返回 true。

  (4)使用remove()将迭代器新返回的元素删除。该方法是在迭代过程中删除元素的唯一的安全方法。

二Iterable接口

Java中还提供了一个Iterable接口,Iterable接口实现后的功能是"返回"一个迭代器,该接口的iterator()方法返回一

个标准的Iterator实现。实现这个接口允许对象成为foreach语句的目标。就可以通过foreach语法遍历你的底层序列。

Iterable接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。因此如果

创建了任何实现Iterable接口的类,都可以将它用于foreach语句中。

Iterable接口中定义唯一的方法:

所有实现了Collection接口的集合类型都有一个iterator()方法用以返回一个实现了Iterator接口的对象。Iterator对象

称作迭代器,用以方便的实现对象容器内元素的遍历操作。

三示例

就像上面所说的,在Java的Iterator借口中定义了三个方法:hasNext()如果仍有元素可以迭代,则返回true;next()

返回迭代的下一个元素;remove()从迭代器指向的collection 中移除迭代器返回的最后一个元素。

我们可以认为迭代器Iterator是指向两个元素之间的位置,我们可以使用hasNext()来判断当前位置后面是否还有元

素。使用next()方法返回后面的元素,并且将位置移动到下一个元素前的位置。对于remove()方法我们删除的是当前

位置前面的元素,所以我们在调用remove()方法之前必须先调用至少一次next()方法。这里所说的迭代器的位置在被

迭代的对象中并不存在的,只是我们为了准确的说明这个方法,而假想出来的。

我们可以使用三种循环体遍历Java集合中的元素:

(1)使用while循环遍历

实例:

import java.util.*;public class Test{public static void main(String[] args){List list = new ArrayList();list.add("aa");list.add("bb");list.add("cc");//使用while循环遍历集合中的元素//使用集合的iterator()返回一个Iterator对象Iterator iter = list.iterator();//使用hasNext()方法判断是否有下一个元素while(iter.hasNext()){//使用next()方法返回元素String str = (String)iter.next();System.out.println(str);}}
}

运行结果:

(2)使用for循环遍历

实例:

import java.util.*;public class Test{public static void main(String[] args){List list = new ArrayList();list.add("one");list.add("two");list.add("three");//使用for循环遍历集合中的元素for(Iterator iter = list.iterator(); iter.hasNext();){String str = (String)iter.next();System.out.println(str);}}
}

运行结果:

(3)使用foreach语句遍历

所谓的foreach语句指的是jdk 5.0新增的的一个循环结构,可以用来处理集合中的每个元素而不用考虑集合定下

标。foreach语句对于遍历array或Collection的时候相当简便。可以看到的是,我们在前面的学习的过程过程中遍历集

合中的元素对象都是使用的这种方式。

格式如下:

for(variable:collection){ statement;
}

实例:

import java.util.*;public class Test{public static void main(String[] args){//定义的数组int[] arr = {1,2,3,4,5};for(int i : arr){System.out.println(i);}System.out.println("-----------------");//定义的集合List l = new ArrayList();l.add(new String("aaa"));l.add(new String("bbb"));l.add(new String("ccc"));for(Object o : l){System.out.println(o);}}
}

运行结果:

当然使用foreach循环结构也有缺陷:如果遍历数组会很不方便的访问到下标值:如果遍历集合那么与与使用

Iterator相比,不能方便的删除集合中的内容。除了简单遍历并读出其中的内容外,不建议使用foreach循环结构。

在网上查询资料的时候看了好多关于Java迭代器的使用文章,看到了一篇很详细的文章,地址是Java迭代器

(转)(iterator详解以及和for循环的区别) ,写的还不错。我们学习的时候最主要的就是借助于Java API。因此经常查

API,学会使用API,我们编写程序的代码会更上一层楼。

JavaSE入门学习38:Java集合框架之迭代器相关推荐

  1. java 集合框架、迭代器、比较器 学习笔记

    java集合框架总览 接口.实现类.算法的定义 常见的集合接口 Set和List的区别 常见的集合实现类 java.util包中定义的实现类 集合算法的概念 Collection Algorithms ...

  2. Java经典入门教程!java集合框架面试

    JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用 ...

  3. JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类

    一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...

  4. android java框架_【阿里P8大牛教你Android入门之路(java篇)】——Java集合框架(系列篇1)...

    一.前言 本部分内容主要包含以下: Java集合 Java反射 Java注解 Java反射 Java IO 其他面试点 以上内容都是Java中的基础知识,对于Java的学习很有帮助.其中集合.反射.I ...

  5. JavaEE学习笔记-(2)java集合框架

    JCF:java集合框架 Collection:单值类型集合 1.List 类型 底层实现 ArrayList(数组元素个数) 数组 LinkedList() 链表 Vector(数组元素个数,步长) ...

  6. Java集合框架图(学习)

    Java集合框架

  7. Java集合框架——一个编程小白的Java SE学习日志11【极客BOY-米奇】

    文章目录 前言(转载请说明作者:极客BOY) 任务导引 List接口 特点 如何使用 ArrayList LinkedList List排序 前言(转载请说明作者:极客BOY) 2020.5.14 发 ...

  8. java集合学习(1):集合框架

    集合 Collection(有时候也叫container)是一个简单的对象, Java集合工具包位于Java.util包下,Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工 ...

  9. 快速了解Java集合框架

    1. 简介 JDK1.2 引入了 Java 集合框架,包含一组数据结构.与数组不同,这些数据结构的存储空间会随着元素添加动态增加.其中,一些支持添加重复元素另一些不支持,一些支持 null,一些能自动 ...

最新文章

  1. bzoj2333 [SCOI2011]棘手的操作(洛谷3273)
  2. [HAOI 2010]软件安装
  3. c语言rand随机输出字母,菜鸟求助,写一个随机输出26个英文字母的程序
  4. Linux移植随笔:终于解决Tslib的问题了【转】
  5. oracle销售服务器吗,oracle 服务器 版本
  6. Django博客--3.创作后台开启
  7. aspcms模板转php,aspcms转换zzzcms,aspcms迁移数据,aspcms替换模板,aspcms模板转换-下载-zzzcms官网-开源免费建站系统...
  8. 视觉SLAM笔记(45) 搭建 VO 框架
  9. 移动端的注册登录设计灵感!
  10. Selenium入门(自动右键保存图片到本机上)
  11. 虚拟机 之 root 用户密码重新设定(忘记了)
  12. 从零开始Android游戏编程(第二版) 第九章 游戏程序的生命周期
  13. 动易 转 html5,动易2005版系统默认风格及修改方法
  14. 腾讯校园招聘历年经典面试题汇总:前端
  15. 微信群导出群成员时间数据_教你一招轻松导出微信群名单
  16. Springboot毕设项目大学生科技项目管理系统0zzjj(java+VUE+Mybatis+Maven+Mysql)
  17. 众达两化融合贯标日记08~培训23001标准
  18. 记一次机器内存过高引起的线上故障
  19. 计算机专业可以报初级经济师吗,初级经济师值得考吗
  20. java将office文件转化为PDF(含PPT、Excel、word)

热门文章

  1. 凝思mysql服务器搭建_部署阿里云服务器全过程——详细篇
  2. 孤岛惊魂3闪退win10win11下运行办法
  3. 罗克韦尔AB PLC RSLogix5000中创建新项目、任务、程序和例程的具体方法和步骤
  4. LED驱动器满足功率、空间和成本挑战
  5. 别具一格的沙漠星空跨年,COLMO与百位超级个体揭露未来营养生活图景
  6. Android事件分发之ACTION_CANCEL机制及作用
  7. 如何设计领导可视化驾驶舱?分享多行业通用方法论
  8. 程序员的5个级别,看看你到几级?
  9. Connection Timeout 问题排查
  10. Java基础 DAY13