JAVA基础 之 Iterator
程序员文章站
2022-04-08 20:01:22
...
概述:
1.Iterator是一个迭代器(不是承载数据的工具)
2.本文重点讲述了Iterator删除问题(工作中遇到的问题)
package com.cxy.collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * @author cxy */ public class IteratorTest { /** * 说明: * 1.Iterator是一个迭代器 * 2.Iterator删除问题(工作中遇到的问题) */ public static void main(String[] args) { Set<String> s = new HashSet<String>(); s.add("苹果"); s.add("香蕉"); s.add("橘子"); //正常使用,带泛型的迭代器 Iterator<String> it = s.iterator(); while(it.hasNext()) { System.out.print(it.next()+" "); } while(it.hasNext()) { System.out.print(it.next()+" "); } //发现第二次访问没有打印任何东西,因为it已经迭代到最后 it.hasNext() 是false System.out.println(""); System.out.println("==================="); //删除问题:工作中经常想用java去处理数据集合,例如:去掉某些不合要求的数据 it = s.iterator(); while(it.hasNext()) { String one = it.next(); //传值非传引用 if("橘子".equals(one)) { it.remove(); //这个删除 是从集合中删除上一次next方法返回的元素 } System.out.print(one+" "); } System.out.println(s); //上面是正规安全的删除,但是很多朋友会很自然的这样去写 it = s.iterator(); s.add("橘子"); //将删除的橘子加回来 while(it.hasNext()) { String one = it.next(); if("橘子".equals(one)) { //这个数据我不要了,我从集合中将其删除 OK 如果你这么做了 你会看到一个ConcurrentModificationException 异常 s.remove(one); } System.out.print(one+" "); } } }
总结:
1.如果你想用java去筛选数据,那么请使用iterator的remove方法
2.foreach虽然简单 但是如果想要安全的删除集合数据还是建议使用iterator
3.多次遍历的时候记得重新获取集合的iterator,it = s.iterator(); 否则第二次遍历将无效。
相关文章连接:
声明:
1.原创文章,转载请标明并加本文连接。
2.更详尽的API请参见 http://docs.oracle.com/javase/7/docs/api/
3.文章反映个人愚见,如有异议欢迎讨论指正
上一篇: JAVA基础 之 集合概述
下一篇: 用spring目标对象处理Transaction rolled back because it has been marked as rollback-only
推荐阅读
-
Java concurrency线程池之Callable和Future_动力节点Java学院整理
-
Java面向对象之成员隐藏与属性封装操作示例
-
JAVA/JSP学习系列之六(MySQL翻页例子)
-
MySQL基础之MySQL 5.7 新增配置
-
Java concurrency之AtomicLongFieldUpdater原子类_动力节点Java学院整理
-
Java常见问题之javac Hello.java找不到文件的解决方法
-
Java concurrency之AtomicReference原子类_动力节点Java学院整理
-
JAVA/JSP学习系列之四(Orion App Server的安装)
-
JAVA/JSP学习系列之五(JDBC-ODBC翻页例子)
-
JAVA/JSP学习系列之七(Orion下自定义Tag)