`

JAVA基础 之 Iterator

    博客分类:
  • java
阅读更多

概述:

    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.《java基础 之 集合概述》

2.《JAVA基础 之 Collection》

 

声明:

1.原创文章,转载请标明并加本文连接。

2.更详尽的API请参见  http://docs.oracle.com/javase/7/docs/api/

3.文章反映个人愚见,如有异议欢迎讨论指正 

分享到:
评论
4 楼 桃花源记 2013-05-07  
snkcxy 写道
a920829018 写道
it = s.iterator();  
        s.add("橘子");  //将删除的橘子加回来  
        while(it.hasNext())  
        {  
            String one = it.next();  
            if("橘子".equals(one))  
            {  
                //这个数据我不要了,我从集合中将其删除 OK 如果你这么做了 你会看到一个ConcurrentModificationException 异常  
                 s.remove(one);   
            }  
            System.out.print(one+"  ");  
        }  

是否添加橘子的语句:s.add("橘子");  //将删除的橘子加回来  放在it = s.iterator();这句之前比较好啊。否则发生的异常就是 由添加橘子引起的

哦 呵呵 是啊 一直没注意到这个顺序问题 

这样的异常是因为并发访问所引起的!
3 楼 snkcxy 2013-04-28  
a920829018 写道
it = s.iterator();  
        s.add("橘子");  //将删除的橘子加回来  
        while(it.hasNext())  
        {  
            String one = it.next();  
            if("橘子".equals(one))  
            {  
                //这个数据我不要了,我从集合中将其删除 OK 如果你这么做了 你会看到一个ConcurrentModificationException 异常  
                 s.remove(one);   
            }  
            System.out.print(one+"  ");  
        }  

是否添加橘子的语句:s.add("橘子");  //将删除的橘子加回来  放在it = s.iterator();这句之前比较好啊。否则发生的异常就是 由添加橘子引起的

哦 呵呵 是啊 一直没注意到这个顺序问题 
2 楼 a920829018 2013-04-28  
it = s.iterator();  
        s.add("橘子");  //将删除的橘子加回来  
        while(it.hasNext())  
        {  
            String one = it.next();  
            if("橘子".equals(one))  
            {  
                //这个数据我不要了,我从集合中将其删除 OK 如果你这么做了 你会看到一个ConcurrentModificationException 异常  
                 s.remove(one);   
            }  
            System.out.print(one+"  ");  
        }  

是否添加橘子的语句:s.add("橘子");  //将删除的橘子加回来  放在it = s.iterator();这句之前比较好啊。否则发生的异常就是 由添加橘子引起的
1 楼 a920829018 2013-04-28  
以前确实没注意这个异常,学习了

相关推荐

    Java学习之Iterator(迭代器)的一般用法

    总之,Iterator作为Java中处理集合数据的核心工具之一,掌握其基本用法和进阶特性,对于提高代码质量和编程效率具有不可忽视的作用。无论是基础的遍历操作,还是高级的双向迭代和元素操作,Iterator都提供了强大的...

    java-util-iterator.pdf java-util-iterator.pdf

    `Collection`接口是Java集合框架的基础,它定义了集合类应该具有的基本行为。此接口中的方法包括但不限于`add()`、`addAll()`、`remove()`、`removeAll()`等。其中,`add(Object c)`方法尤为关键,用于向集合中添加...

    java基础之集合

    ### Java基础之集合详解 #### 一、集合简介 ##### 1.1 集合定义 集合在Java中是一种容器,它可以存储任意数量的具有共同属性的对象。这些对象可以是不同类型的数据,如整数、字符串等。 ##### 1.2 集合作用 - **...

    《Java 基础入门(传智播客)》_高清中文版pdf 网盘链接

    ### Java基础入门核心知识点概览 #### 1. Java简介与安装 - **Java概述**:介绍Java的历史背景和发展趋势,以及Java的特点,如平台无关性、面向对象特性等。 - **JDK/JRE/JVM的区别**:解释Java Development Kit...

    Java基础教学视频详解

    根据提供的文件信息,“Java基础教学视频详解”主要面向Java初学者,旨在通过详细的讲解帮助学习者掌握Java基础知识。下面将围绕这一主题展开更深入的知识点介绍。 ### Java基础概述 Java是一种广泛使用的、面向...

    Java基础实战_Bank项目_081

    在这个Java基础实战项目中,Bank项目的目标是使用集合来替换原有的数组实现,以更好地管理和表示银行与客户,以及客户与其账户之间的关系。这里主要涉及了Java集合框架中的ArrayList,以及对象属性和方法的修改。 ...

    java基础核心学习笔记

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)于1995年发布。Java的设计目标是具有高度的可移植性、安全性以及健壮性...记得理论与实践相结合,不断练习,才能真正掌握Java基础核心。

    java 中 Iterator 与Iterable的作用

    java 中 Iterator 与Iterable的作用;java语言需要更多基础沉淀,扎扎实实,后面的各种项目都会如何天翼。进行更高阶的用法和一些框架的原理都离开最基础的东西,基础虽然枯燥,但是也很有乐趣。

    java基础知识点

    ### Java基础知识点详解 #### 一、Java集合类框架 Java集合类框架是Java编程语言中用于处理数据的重要工具之一,主要包括以下基本接口: 1. **`Collection`**:这是集合类框架的基础接口,它代表了一个对象的集合...

    Java 基础核心总结 +经典算法大全.rar

    《Java 基础核心总结》 Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else ...

    java入门基础部分总概思维导图

    Java基础 * Java的基本数据类型包括整型、浮点型、字符型、布尔型、数组等。 * Java的变量可以通过关键字`final`、`static`、`abstract`等来修饰。 * Java的运算符包括算术运算符、比较运算符、逻辑运算符、赋值...

    java基础语法程序源代码

    本压缩包包含了一系列关于Java基础语法的源代码示例,旨在帮助初学者深入理解和掌握Java编程的核心概念。以下将针对每个章节的可能内容进行详细阐述: 1. **Chapter 1:基础语法** - 变量声明与初始化:包括基本...

    Java的Iterator模式分页程序

    大体思想:分页的核心思想采用 Iterator模式,每次从数据库中取定量的数据块 其中block和pageCount是两个不同的概念,block是块,规定了从数据库中获取的数量 pageCount为表现层每页显示的数量 另外参数中还包含缓存...

    动力节点Java基础301集

    根据提供的文件信息,“动力节点Java基础301集”是一套非常全面的Java基础教程,旨在为初学者和有一定基础的学习者提供系统化的学习资源。接下来,我们将从以下几个方面对这套教程涉及的重要知识点进行总结: ### ...

    java基础教学视频附带源码

    根据提供的文件标题、描述、标签以及部分内容链接,我们可以总结出一系列与Java基础知识相关的知识点。由于实际视频内容无法直接查看,以下内容将基于标题和描述中提及的信息进行展开,旨在为初学者提供一个全面且...

    Java基础教程ppt格式,东方标准

    这份“Java基础教程”PPT是由东方标准提供的,对于初学者来说是一份很好的学习资源。 教程可能涵盖以下内容: 1. **Java简介**:讲解Java的历史、特点、应用领域以及与C++等其他语言的区别。 2. **Java环境搭建**...

    java基础面试题目大全, 合适JAVA面试的程序员

    Java基础面试题目主要涵盖了许多核心概念,包括语言特性、数据结构、并发处理、异常处理、类与对象的关系、以及Web开发相关的技术。以下是对这些知识点的详细解释: 1. **公共(public)、受保护(protected)、...

    2022年Java源码分析:深入探讨Iterator模式Java教程.docx

    在Java编程语言中,Iterator模式是一种设计模式,用于在各种数据结构(如集合)中进行迭代操作,使得用户可以顺序地访问集合中的元素,而无需了解底层数据结构的细节。这个模式有效地解耦了集合对象和遍历行为,提供...

    Java基础面试题集合

    Java作为一门广泛使用的编程语言,其基础知识在面试中占据着重要...以上只是Java基础知识的一部分,实际面试中还可能涉及更多细节和实战经验。通过深入学习和实践这些知识点,能够为Java开发者在面试中提供坚实的基础。

Global site tag (gtag.js) - Google Analytics