- 浏览: 504607 次
- 性别:
- 来自: 沈阳
-
文章分类
- 全部博客 (437)
- Windows设置 (2)
- oracle数据库 (39)
- bug--jsp (4)
- j2se (13)
- js (40)
- bug-tomcat不能启动程序 (1)
- Hibernate (29)
- eclipse (20)
- java (65)
- 设计模式 (6)
- bug (18)
- PL/SQL (11)
- 前台 (5)
- 杂谈 (25)
- UML (1)
- jdbc编程 (2)
- 技术调研 (1)
- 数据通信 (2)
- ios (1)
- servlet自学笔记 (10)
- tomcat (9)
- SQL学习笔记 (6)
- java工具 (1)
- 数据库设计 (4)
- javascript (10)
- jsp (11)
- struts (17)
- ajax (7)
- linix/Unix (6)
- 资源 (3)
- spring (14)
- 算法 (5)
- 计算机网络 (2)
- http (5)
- c++ (2)
- web应用 (3)
- jvm (5)
- java中的字符编码 (14)
- java代码库 (2)
- classloader (1)
- 读书笔记 (1)
- c (1)
- 开源软件 (1)
- svn (1)
- AOP (1)
- java序列化 (1)
- 多线程 (4)
- The legendary programmers (1)
- Apache http Server (1)
- html tag (3)
- struts1.X学习笔记 (5)
- buffalo (1)
- 自己收藏 (0)
- TOEFL(IBT) (1)
- 网络翻墙 (0)
- 编译原理 (1)
- 书籍推荐 (1)
- css (10)
- javaee环境搭建资料 (1)
- 开源工具 (1)
- 美国生活 (1)
- spring自学 (3)
- log4j (3)
- 算法与数据结构 (5)
- 病毒,插件处理大全 (1)
- flex (2)
- webservice (1)
- git (7)
- cs (1)
- html (4)
- javaee (6)
- 开车 (0)
- springmvc (3)
- 互联网架构 (2)
- intellij idea (18)
- maven (15)
- mongodb (2)
- nginx (1)
- react (3)
- java基础例子 (2)
- springboot (2)
- 培训 (5)
- mysql (3)
- 数据库 (3)
- 生活 (2)
- intellij (3)
- linux (2)
- os (3)
最新评论
-
潇洒天涯:
[color=blue][color=cyan] ...
oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 -
hekai1990:
受教了..
oracle中的varchar2
已经是第二次碰到这个题目了。如果你以前没有专门的看这一块的话,很有可能你给出的答案是不正确的。 题目要求: 给出如下的程序,问如何删除 BBB 对应的元素,请把代码补充完整。 给出的代码框架: [CODE] import java.util.*; class ArrayListTest { [CODE] 这块代码的意图很明显,通过 iterator的方式删除元素。 如果你给出的代码是这个样子: String toDel = it.next(); if(toDel.equals("BBB")) { 那么恭喜你,答错了! 运行时会抛出异常: Exception in thread "main" java.util.ConcurrentModificationException 抛出异常java.util.ConcurrentModification,为什么?这和 Iterator的内部实现有关系。有兴趣的话可以查看 Iterator 的源代码实现。 要怎么实现呢? 是这样的,再添加一条语句: String toDel = it.next(); if(toDel.equals("BBB")) { 调用 Iterator自身的remove()方法的目的是一并删除当前元素,它会自动同步expectedModCount和modCount的值。所以 checkForComodification()方法就不会抛出ConcurrentModificationException 异常了。 查看源代码,Iterator 中 remove() 方法的实现如下: public void remove() { 文章中也给出建议: 要确保遍历过程顺利完成,必须保证遍历过程中不更改集合的内容(Iterator的remove()方法除外),因此,确保遍历可靠的原则是只在一个线程中使用这个集合,或者在多线程中对遍历代码进行同步。 所以,根据题目要求,所要完成的完整代码为: [CODE] import java.util.*; class ArrayListTest { if(toDel.equals("BBB")) {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
System.out.println(list);
Iterator<String> it = list.iterator();
while(it.hasNext()) {
// 需要实现的代码
}
System.out.println(list);
}
}
list.remove(toDel);
}
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at ArrayListTest.main(ArrayListTest.java:63)
这里廖雪峰的一篇文章: Java源码分析:深入探讨Iterator模式 供参考。
it.remove(toDel); // 需要添加这个语句
list.remove(toDel);
}
...
AbstractList.this.remove(lastRet);
...
// 在调用了集合的remove()方法之后重新设置了expectedModCount:
expectedModCount = modCount;
...
}
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("AAA");
list.add("BBB");
list.add("CCC");
list.add("DDD");
System.out.println(list);
Iterator<String> it = list.iterator();
while(it.hasNext()) {
String toDel = it.next();
it.remove(toDel); // 需要添加这个语句
list.remove(toDel);
}
}
System.out.println(list);
}
}
发表评论
-
【转】Spring的DAO异常-你可能忽视的异常
2018-10-11 05:04 542Spring的DAO框架没有抛出与特定技术相关的异常,例如 ... -
【转】java8 Optional
2018-10-05 02:39 470https://my.oschina.net/wangz ... -
java double checked locking broken
2018-09-15 01:56 490// Double-check idiom for lazy ... -
【转】JAVA泛型通配符(PECS)
2018-07-29 10:43 517在JAVA的泛型集合中,默认都可以添加null,除此以外, ... -
Differences between notify() and notifyAll()
2018-07-16 09:01 523Notification to number of th ... -
【转】深度解析Java多线程的内存模型
2018-07-16 09:00 488https://www.jianshu.com/p/a3f ... -
maven项目src源代码下的资源文件不自动复制到classes文件夹的解决方法
2018-07-01 23:34 1191POM文件 <build><resour ... -
java好用的开源库
2018-04-28 23:40 0guava--google第三方数据结构开源包 Vardu ... -
【转】java rmi
2018-01-03 18:57 402此处讲的是Java中的RMI ... -
【转】字符编码笔记:ASCII,Unicode 和 UTF-8
2017-12-12 19:09 452今天中午,我突然想搞清楚 Unicode 和 UTF-8 之 ... -
【转】Java web 学习路线
2017-06-14 15:55 705JSP -> Servlet -> Java ... -
有意思的ASCII程序注释
2017-06-14 10:39 737/** * * create ... -
【转】Java基础知识总结(绝对经典)
2017-06-13 14:13 524本人学习java时,做的java基础知识总结: 因内容较 ... -
java定时任务
2017-03-27 10:08 412import java.util.concurrent.Ex ... -
二分查找(java实现)
2017-03-21 11:02 488二分查找 算法思想:又叫折半查找,要求待查找的序列有序。每 ... -
java环境配置
2017-03-15 15:46 442增加系统变量: JAVA_HOME C:\Program ... -
Java中的Big(Little)-endian问题的一种解决方法
2017-03-08 15:47 1035http://blog.sina.com.cn/s/blo ... -
【转】Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
2016-12-13 15:07 708http://www.cnblogs.com/hoojo ... -
【转】JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
2016-12-13 14:50 1285http://www.cuomi.com/html/co ... -
【转】JNDI学习总结(二)——Tomcat下使用C3P0配置JNDI数据源
2016-12-13 14:48 729http://blog.csdn.net/samjustin ...
相关推荐
使用Iterator遍历ArrayList Iterator是Java集合框架中的一种接口,用于遍历集合中的元素。下面是一个使用Iterator遍历ArrayList的示例代码: ```java ArrayList arrayList = new ArrayList(); Iterator it = ...
当你想在迭代过程中删除元素时,应该使用`Iterator`的`remove()`方法,而不是直接调用集合的`remove()`方法。这样,`Iterator`会正确处理集合的内部状态,避免异常: ```java List<String> list = new ArrayList...
在Struts2框架中,`<s:iterator>`标签被广泛用于遍历集合或数组等数据结构。本文将深入探讨如何使用Struts2中的`<s:iterator>`标签来遍历二维数组,并通过实例代码来具体说明其用法。 ### Struts2 Iterator标签 ##...
ArrayList提供了一种高效的方式来管理大量的元素,并且提供了迭代器(Iterator)来遍历这些元素,使得我们可以在不暴露底层实现细节的情况下访问和修改列表中的元素。这个资源的目的是通过模拟Java ArrayList的...
迭代器的实现原理:当遍历集合时,首先通过调用Collection集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合...
但是,需要注意的是,我们需要从后往前遍历ArrayList,以免引发 ConcurrentModificationException 异常。 ```java public static void main(String[] args) { ArrayList<String> list = new ArrayList(); list....
六、遍历ArrayList 1. for-each循环:`for (E e : list) { ... }` 2. Iterator迭代器:`Iterator<E> iterator = list.iterator(); while (iterator.hasNext()) { E e = iterator.next(); ... }` 七、ArrayList的...
在Java编程中,集合类遍历的同时进行删除操作是一个常见的需求,但如果不正确地执行,可能会导致`ConcurrentModificationException`。这个问题主要出现在迭代器正在遍历集合时,集合本身被修改的情况。以下是对这个...
- `ConcreteAggregate`类使用`LinkedList`作为其内部数据结构,因为`LinkedList`提供了快速的插入和删除操作,这在迭代器模式中可能不那么关键,但在其他场景下可能是有益的。 - 在主类`Client`中,首先创建了一个`...
例如,`Vector` 和 `Hashtable` 这些旧的集合类仍然支持 `Enumeration`,但在新代码中,应尽量避免使用这些过时的集合类型,转而使用 `ArrayList`、`HashMap` 等现代集合类,它们默认支持 `Iterator`。 总结来说,`...
通过Iterator迭代器,可以遍历ArrayList、Set、Map等各种集合类型。 1、使用迭代器遍历ArrayList集合 在Java中,ArrayList是一种常见的集合类型,可以使用Iterator迭代器来遍历其元素。下面是一个简单的实例: ``...
### Java集合类ArrayList循环中删除特定元素的方法 #### 背景与问题 在Java编程中,`ArrayList`是开发者最常使用的集合类之一。它实现了`List`接口,提供了动态数组的功能。在实际开发过程中,经常需要遍历`...
因此,在使用Iterator遍历集合时,不能直接使用集合的remove方法删除元素,而应该使用Iterator的remove方法来删除元素。这是Java集合框架中的一个重要机制,可以避免ConcurrentModificationException异常的出现。 ...
可以通过增强for循环(foreach)或传统的迭代器方式遍历ArrayList中的元素。 ```java for (String s : list) { System.out.println(s); } Iterator<String> iterator = list.iterator(); while (iterator....
以下是如何使用Iterator遍历ArrayList: ```java ArrayList<String> arrayList = new ArrayList(); arrayList.add("b"); arrayList.add("z"); arrayList.add("f"); arrayList.add("m"); System.out.println("以下...
通过实验,我们可以看到,当元素数量较大(如1000000)时,使用索引遍历(第四种方法)的效率最高,其次是增强型for循环,然后是使用Iterator。当元素数量较小(如10)时,各种方法之间的差异变得微不足道,因为此时...
在Java中,我们通常会使用`Iterator`来安全地遍历并修改集合,因为`Iterator`提供了`remove()`方法来删除当前迭代的元素。但如果你在不使用`Iterator`的情况下直接调用集合的`remove()`或其他修改方法,就会触发异常...
在上述描述中,提到了如何使用Iterator模式来解决在JSOM、XML、Java bean等对象操作时遇到的问题。通常,访问者模式用于访问并操作对象结构中的元素,但它在控制回调方面存在局限性,无法方便地跳过某些特定分支。...
在Java编程中,遍历并删除集合(如List或Set)中的元素是一项常见的操作,但如果不正确地执行,可能会导致`ConcurrentModificationException`异常。这个异常通常在尝试修改正在迭代的集合时出现,因为Java的集合迭代...
- 可以通过for-each循环,或者使用迭代器(Iterator)来遍历ArrayList的元素。 理解并熟练运用ArrayList的方法,对于编写高效的Java代码至关重要。在实际编程中,根据具体需求选择合适的方法,可以有效地管理集合...