迭代神器-Iterator接口
一 Iterator接口基础
1 Iterator接口概述
Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。
2 Iterator接口定义的4个方法
boolean hasNext():如果被迭代的集合,元素还有没被遍历完,则返回true。
Object next():返回集合里下一个元素。
void remove():删除集合里上一次next方法返回的元素。
void forEachRemaining(Consumer action),这是Java 8为Iterator新增的默认方法,该方法可使用Lambda表达式来遍历集合元素。
二 正确代码演示
1 代码示例
import java.util.*; public class IteratorTest { public static void main(String[] args) { Collection books = new HashSet(); books.add("现代操作系统"); books.add("Java典型应用"); books.add("TCP/IP协议"); // 获取books集合对应的迭代器 Iterator it = books.iterator(); while(it.hasNext()) { // it.next()方法返回的数据类型是Object类型,因此需要强制类型转换 String book = (String)it.next(); System.out.println(book); if (book.equals("Java典型应用")) { // 从集合中删除上一次next方法返回的元素 it.remove(); } // 对book变量赋值,不会改变集合元素本身 book = "测试字符串"; //① } System.out.println(books); } }
2 运行结果
Java典型应用
现代操作系统
TCP/IP协议
[现代操作系统, TCP/IP协议]
3 代码说明
上面程序中①行代码对迭代变量book进行赋值,但再次输出books集合时,会看到集合里的元素没有任何变化。这就可以得出一个结论:当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给迭代
变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有影响。
三 错误代码演示
1 代码示例
import java.util.*; public class IteratorErrorTest { public static void main(String[] args) { Collection books = new HashSet(); books.add("JSP"); books.add("Linux"); books.add("C++"); // 获取books集合对应的迭代器 Iterator it = books.iterator(); while(it.hasNext()) { String book = (String)it.next(); System.out.println(book); if (book.equals("Linux")) { // 使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常 books.remove(book); } } } }
2 运行结果
C++
Linux
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(HashMap.java:1437)
at java.util.HashMap$KeyIterator.next(HashMap.java:1461)
at IteratorErrorTest.main(IteratorErrorTest.java:18)
3 代码分析
books.remove(book); 位于迭代块内,也就是在Iterator迭代Collection集合过程中修改了Collection集合,所以程序将在运行时引发异常。
上一篇: 44、commons-beanutils
下一篇: java 集合之Connection
推荐阅读
-
PHP设计模式之迭代器(Iterator)模式入门与应用详解
-
Python中Iterator迭代器的使用杂谈
-
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
-
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
-
PHP中的Iterator迭代对象属性详解
-
PHP设计模式之迭代器(Iterator)模式入门与应用详解
-
python中迭代器(iterator)用法实例分析
-
Java Iterator接口实现代码解析
-
关于for丶foreach丶iterator 迭代器
-
荐 Collection集合,Iterator迭代器,<>泛型