迭代神器-Iterator接口
来源:互联网 发布:卢比奥生涯数据 编辑:程序博客网 时间:2024/06/01 07:59
一 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集合,所以程序将在运行时引发异常。
- 迭代神器-Iterator接口
- Java迭代 : Iterator和Iterable接口
- Iterator——迭代接口
- Iterator 迭代模式
- 迭代模式(Iterator)
- iterator迭代遍历
- java迭代Iterator
- iterator迭代
- struts2 iterator迭代
- struts2 iterator标签--迭代!
- php关于Iterator (迭代)
- php关于Iterator (迭代)
- 迭代输出:Iterator总结
- 迭代模式 Iterator Pattern
- 使用Iterator迭代删除
- Iterator 集合的迭代
- 迭代 Iterable与Iterator
- Java集合Iterator迭代
- scrapy框架爬取京东商城商品的评论
- 使用Lambda表达式遍历集合
- BZOJ 3312 [Usaco2013 Nov]No Change
- 最好用的float型保留N位小数的方法
- 简单Java类实训三
- 迭代神器-Iterator接口
- 主流应用服务器
- (继承)Problem C: 家教课程
- 使用Java 8新增的Predicate操作来操作集合
- 使用foreach遍历集合元素
- mybatis 插入一条数据返回相应数据ID
- 使用Lambda表达式遍历Iterator
- Java对称加密算法
- Set最常见子类HashSet