Exception in thread "main" java.util.ConcurrentModificationException
2016-04-14 19:41
633 查看
经常我们要删除集合中的某些元素。有些可能会这么写。
Java代码
public void operate(List list){
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
list.remove(str);
}
}
}
这种写法一运行就会报如下异常:
Java代码
Exception in thread "main" java.util.ConcurrentModificationException
t java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
因为list在循环中的时候是不可以删除它的元素的。后来我是这样做的,一种很笨的方法,思路是这样的:创建一个List专门存放要被删除的元素,循环过后,用List.removeAll方法把元素删除。代码如下:
Java代码
public void operate(List list){
List removeList= new ArrayList();
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
removeList.add(str);
}
}
list.removeAll(removeList);
}
这样也确实可以解决问题了,但是方法实在太笨重,其实可以有更简单的更高效的方法,就是用Iterator.remove方法,如下:
Java代码
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
所以,你对Java的基础知识了解越多,代码就会写得越简洁。相反如果你的代码特别复杂,则方法或设计一定有问题。
Java代码
public void operate(List list){
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
list.remove(str);
}
}
}
这种写法一运行就会报如下异常:
Java代码
Exception in thread "main" java.util.ConcurrentModificationException
t java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
因为list在循环中的时候是不可以删除它的元素的。后来我是这样做的,一种很笨的方法,思路是这样的:创建一个List专门存放要被删除的元素,循环过后,用List.removeAll方法把元素删除。代码如下:
Java代码
public void operate(List list){
List removeList= new ArrayList();
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
removeList.add(str);
}
}
list.removeAll(removeList);
}
这样也确实可以解决问题了,但是方法实在太笨重,其实可以有更简单的更高效的方法,就是用Iterator.remove方法,如下:
Java代码
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
所以,你对Java的基础知识了解越多,代码就会写得越简洁。相反如果你的代码特别复杂,则方法或设计一定有问题。
相关文章推荐
- struts 2 标签中添加 class 属性
- JAVA集合类图
- struts1 action 之间的跳转
- Spring MVC 文件上传的MaxUploadSizeExceededException异常处理
- 配置eclipse内存
- eclipse 打jar包并混淆
- JAVA基础之四:字符串
- web框架-Struts开始
- JAVA基础之三:运算操作符
- JAVA基础之二:变量和数据类型
- JAVA基础之一:基础语法
- SSH框架中spring的原理
- Eclipse中禁用JS验证
- 关于eclipse的快捷键
- Java反射机制深入研究
- java的动态代理机制详解 | Java基础
- Spring-bean作用域scope详解
- spring mvc+mybatis+多数据源切换
- Spring中Bean的命名 (id 和name)
- 关于加载Spring加载外部文件属性.properties的问题