JavaSE入门学习38:Java集合框架之迭代器
一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集合框架之迭代器相关推荐
- java 集合框架、迭代器、比较器 学习笔记
java集合框架总览 接口.实现类.算法的定义 常见的集合接口 Set和List的区别 常见的集合实现类 java.util包中定义的实现类 集合算法的概念 Collection Algorithms ...
- Java经典入门教程!java集合框架面试
JAVA基础 JAVA异常分类及处理 异常分类 异常的处理方式 Throw和throws的区别 JAVA反射 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) Java反射API 反射使用 ...
- JavaSE入门学习34:Java集合框架之Collection接口、子接口及其实现类
一Collection接口 Collection接口定义了存取一组对象的方法,其子接口Set.List和Queen分别定义了存储方式. 使用Collection接口需要注意: 1Collection接 ...
- android java框架_【阿里P8大牛教你Android入门之路(java篇)】——Java集合框架(系列篇1)...
一.前言 本部分内容主要包含以下: Java集合 Java反射 Java注解 Java反射 Java IO 其他面试点 以上内容都是Java中的基础知识,对于Java的学习很有帮助.其中集合.反射.I ...
- JavaEE学习笔记-(2)java集合框架
JCF:java集合框架 Collection:单值类型集合 1.List 类型 底层实现 ArrayList(数组元素个数) 数组 LinkedList() 链表 Vector(数组元素个数,步长) ...
- Java集合框架图(学习)
Java集合框架
- Java集合框架——一个编程小白的Java SE学习日志11【极客BOY-米奇】
文章目录 前言(转载请说明作者:极客BOY) 任务导引 List接口 特点 如何使用 ArrayList LinkedList List排序 前言(转载请说明作者:极客BOY) 2020.5.14 发 ...
- java集合学习(1):集合框架
集合 Collection(有时候也叫container)是一个简单的对象, Java集合工具包位于Java.util包下,Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工 ...
- 快速了解Java集合框架
1. 简介 JDK1.2 引入了 Java 集合框架,包含一组数据结构.与数组不同,这些数据结构的存储空间会随着元素添加动态增加.其中,一些支持添加重复元素另一些不支持,一些支持 null,一些能自动 ...
最新文章
- bzoj2333 [SCOI2011]棘手的操作(洛谷3273)
- [HAOI 2010]软件安装
- c语言rand随机输出字母,菜鸟求助,写一个随机输出26个英文字母的程序
- Linux移植随笔:终于解决Tslib的问题了【转】
- oracle销售服务器吗,oracle 服务器 版本
- Django博客--3.创作后台开启
- aspcms模板转php,aspcms转换zzzcms,aspcms迁移数据,aspcms替换模板,aspcms模板转换-下载-zzzcms官网-开源免费建站系统...
- 视觉SLAM笔记(45) 搭建 VO 框架
- 移动端的注册登录设计灵感!
- Selenium入门(自动右键保存图片到本机上)
- 虚拟机 之 root 用户密码重新设定(忘记了)
- 从零开始Android游戏编程(第二版) 第九章 游戏程序的生命周期
- 动易 转 html5,动易2005版系统默认风格及修改方法
- 腾讯校园招聘历年经典面试题汇总:前端
- 微信群导出群成员时间数据_教你一招轻松导出微信群名单
- Springboot毕设项目大学生科技项目管理系统0zzjj(java+VUE+Mybatis+Maven+Mysql)
- 众达两化融合贯标日记08~培训23001标准
- 记一次机器内存过高引起的线上故障
- 计算机专业可以报初级经济师吗,初级经济师值得考吗
- java将office文件转化为PDF(含PPT、Excel、word)