`
james23dier
  • 浏览: 530198 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java iterator迭代器迭代ArrayList

阅读更多
     好久没有上自己的博客了,正好今天有点时间,写了点东西,关于iterator迭代arraylist的。感觉比较有意思,值得记录下来。
      最开始的代码如下:
 
Iterator iterator  = list.iterator();
while(iterator.hasNext()){
        	int a = (Integer)iterator.next();
         list.remove(Integer.valueOf(a));
        	if(iterator.hasNext()){
        		int b = (Integer)iterator.next();
        		list.remove(Integer.valueOf(b));
           	list.add(a+b);
        		iterator = null;
        		System.gc();
        		iterator = list.iterator();
        	}
        }


此时 异常信息如下:
java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
	at java.util.AbstractList$Itr.next(Unknown Source)



百思不得其解 改正代码如下:
        while(iterator.hasNext()){
        	int a = (Integer)iterator.next();
        	if(iterator.hasNext()){
        		Integer b = (Integer)iterator.next();
        		
                  list.remove(Integer.valueOf(a));
        		list.remove(Integer.valueOf(b));
        		list.add(a+b);
        		iterator = null;
        		System.gc();
        		iterator = list.iterator();
        	}
        }


运行代码,正确无误。


两端代码唯一不同之处,在于从list中移除a的时机。
第一段代码在iterator第二次迭代之前调用list.remove()
而第二段代码在iterator第二次迭代之后统一调用list.remove()方法。
由此总结出来,估计是list的改变导致了iterator.next()方法找不准位置。
3
0
分享到:
评论
4 楼 billyyuan 2014-03-08  
a542550187 写道
billyyuan 写道
好像是你用错了Iterator吧,remove不应该用list做。而应该用Iterator.remove();

推荐用iterator的remove方法,书上这么说的


是的,我指出他的错误。
3 楼 a542550187 2014-02-24  
billyyuan 写道
好像是你用错了Iterator吧,remove不应该用list做。而应该用Iterator.remove();

推荐用iterator的remove方法,书上这么说的
2 楼 billyyuan 2013-02-05  
好像是你用错了Iterator吧,remove不应该用list做。而应该用Iterator.remove();
1 楼 urfriend 2012-09-07  
两端代码唯一不同之处,在于从list中移除a的时机。

list中删了最后一个元素,iterator(hasNext)不知道,但是取值的时候(iterator.next())找不到就错了

相关推荐

    java迭代器模式实现正反向遍历

    在Java编程语言中,迭代器模式(Iterator Pattern)是一种常用的设计模式,用于顺序访问集合对象中的元素,而无需暴露其底层表示。这种模式提供了一种方法来访问一个聚合对象的元素,而无需暴露该对象的内部结构。在...

    java Iterator迭代器的使用

    要使用`Iterator`,首先需要通过调用集合类的`iterator()`方法来获取迭代器实例。例如,对于ArrayList,代码可能如下所示: ```java ArrayList<String> list = new ArrayList(); // 添加元素... Iterator...

    Iterator迭代器讲解

    ### Iterator迭代器详解 #### 一、Iterator简介与概念 在Java编程语言中,`Iterator`接口是一个重要的组件,它提供了遍历集合的基本方法。`Iterator`的主要作用是在不暴露集合内部结构的情况下,顺序访问集合中的...

    Java使用Iterator迭代器遍历集合数据的方法小结

    在Java中,ArrayList是一种常见的集合类型,可以使用Iterator迭代器来遍历其元素。下面是一个简单的实例: ```java List list = new ArrayList(); list.add(1); list.add(2); list.add(3); Iterator iter = list....

    如何实现java Iterator迭代器功能

    Java Iterator迭代器功能实现 Java Iterator迭代器是Java集合框架中的一种重要组件,用于遍历集合中的元素。在Java中,Iterator接口是Java集合框架的核心组件之一,它提供了一种通用的方式来遍历集合中的元素。 在...

    (行为型模式) Iterator 迭代器模式

    ### (行为型模式) Iterator 迭代器模式 #### 概述 在软件工程领域,设计模式被广泛应用于解决常见的编程问题。其中,“迭代器模式”作为一种行为型设计模式,在处理集合类对象时发挥着重要作用。本文将详细介绍...

    Java编程Iterator迭代器设计原理及实现代码示例

    Java编程Iterator迭代器设计原理及实现代码示例 Iterator迭代器是Java编程中的一种常见数据结构,用于遍历集合中的元素。在Java中,Iterator迭代器是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素。...

    Java Iterator迭代器_动力节点Java学院整理

    Java Iterator迭代器 Java Iterator迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离。这种模式可以让我们无需关心该序列的底层结构是什么样子的,只要拿到这个对象,使用迭代器就...

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

    在深入探讨Java中Iterator(迭代器)的一般用法之前,我们先来理解一下迭代器在编程中的核心价值。迭代器是一种设计模式,其主要作用在于遍历集合中的元素,而无需开发者知晓集合的具体实现细节。这使得代码更加灵活、...

    模拟java ArrayList Iterator

    ArrayList提供了一种高效的方式来管理大量的元素,并且提供了迭代器(Iterator)来遍历这些元素,使得我们可以在不暴露底层实现细节的情况下访问和修改列表中的元素。这个资源的目的是通过模拟Java ArrayList的...

    Java如何使用Iterator迭代器删除集合重复选项

    Java Iterator 迭代器删除集合重复选项 Java 中使用 Iterator 迭代器删除集合重复选项是非常重要的知识点,以下是对该知识点的详细解释。 Iterator 迭代器的介绍 Iterator 迭代器是 Java 中的一种设计模式,用于...

    java 迭代及迭代器的小例子

    在Java编程语言中,迭代是遍历集合对象(如数组、列表或集合)的重要机制,而迭代器(Iterator)则是实现这一机制的关键工具。这里,我们通过一个小例子来深入理解Java中的迭代和迭代器。 首先,我们需要了解什么是...

    【Java设计模式】(1)迭代器模式Iterator

    在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,通过Iterator接口实现对集合的遍历。 **迭代器模式的核心组件:** 1. **迭代器(Iterator)角色**:这是模式的核心,它定义了遍历元素的接口...

    Map、Set、Iterator迭代详解

    ### Iterator迭代器详解 #### 1. Iterator接口介绍 `Iterator`接口提供了遍历`Collection`中元素的能力。它是一种设计模式,允许开发者遍历容器中的元素,而无需暴露容器底层的实现细节。 #### 2. Iterator接口的...

    自己实现java中Iterator(迭代器功能).docx

    ### 自己实现Java中的Iterator(迭代器功能) #### 背景与动机 在Java编程过程中,迭代器(`Iterator`)是一种常见的用于遍历集合元素的机制。它提供了访问集合元素的方式,而不暴露底层数据结构。对于学习或进阶...

    一文读懂Java Iterator(迭代器)

    Java Iterator(迭代器) Java Iterator(迭代器)是 Java 中的一种机制,用于访问和遍历集合中的元素。它提供了一种通用的方式来访问集合中的元素,不管集合的类型是 ArrayList还是 HashSet。 Iterator 是 Java ...

    迭代器Iterator.txt

    根据提供的文件信息,我们可以深入探讨迭代器(Iterator)这一设计模式在Java中的应用与实现细节。迭代器模式是一种常用的设计模式,它允许我们以一种顺序访问集合对象的方式遍历其元素,而无需暴露该对象的内部表示...

    Java Iterator接口遍历单列集合迭代器原理详解

    Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程: 在调用Iterator的next方法时,迭代器...

    迭代器模式.rar之java设计模式

    迭代器模式在Java集合框架中广泛应用,例如`ArrayList`、`LinkedList`、`HashSet`等都实现了`Iterable`接口,并提供了各自的迭代器实现。这些集合类的迭代器各自有不同的性能特点。例如,`ArrayList`的迭代器速度快...

    Java设计模式之Iterator模式

    2.定义一个Iterator迭代器的接口 3.定义一个ArrayList,实现Collection接口,并写一个实现了Iterator接口的内部类。 4.编写测试程序TestMain 从以上可以看出,设计模式到处用到面向对象中的多态。接口调用子类中的...

Global site tag (gtag.js) - Google Analytics