迭代器和集合共同操作引发的异常
来源:互联网 发布:python subprocess 编辑:程序博客网 时间:2024/04/30 10:22
前注:本文参考传智博客毕向东老师的java教学视屏加上本菜鸟的一些总结理解,错漏之处烦请各位批评改正,望共同进步。
一 背景简介
迭代器:Iterator
集合: List
异常: java.util.ConcurrentModificationException
二 代码展示(以下代码是毕向东老师)
//导包
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class StringDemoText {
public static void main(String[] args) {
List list = new ArrayList();//用ArrayList实现List集合
show(list);
}
public static void show(List list) {
//用add方法向集合list添加元素
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
//得到list的迭代器
Iterator it = list.iterator();
/*
用迭代器取出元素的同时用机和进行操作
判断取出的对象是否为“abc2”如果是添加“abc8”
否则直接打印
*/
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("abc2")){
list.add("abc8");
}
else{
System.out.println(obj);
}
}
}
}
三 解答
毕向东老师解答:
在迭代器过程中不要用集合操作容易出现异常。
四 思考(要避免此异常要怎么样)
毕向东老师解答:
可以迭代的过程中不用集合操作。
五 代码变形(为什么,问题给大家思考,答案在后面)
1.System.out.println(obj);
改为 System.out.println(it.next());
异常消失了。
2.改为System.out.println(it.next());后在去除list.add("abc4");
异常出现了。
3.以上代码的实现(想法)也可以用List的特有方法get
就像:
public class StringDemoText {
public static void main(String[] args) {
List list = new ArrayList();
show(list);
}
public static void show(List list) {
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4");
for(int x = 0 ; x < list.size(); x ++){
Object obj = list.get(x);
if(obj.equals("abc2")){
(List)obj.add(1 , "abc8");//报错为什么????
}
else{
System.out.println(obj);
}
}
}
}
可是报错。。。。唉~~~~
1.答:避免了list.add("abc8");这句代码
2.答:如果改为System.out.println(it.next());但是没有去除list.add("abc4");可以取出偶数个元素。
去除后报错说找不到元素
六 end
java_haha努力更新中。。。
- 迭代器和集合共同操作引发的异常
- 一个异常引发的集合多线程思考
- a标签的href属性和onclick事件共同使用可能引发的问题
- 深入理解C#的装箱和拆箱、使用非泛型集合时引发的装箱和拆箱操作
- SqlDataReader引发的异常
- 一个异常引发的对Hashtable和HashMap的思考
- Autolayout与CATransform3D共同使用引发的问题解决
- 多线程共同使用一个锁引发的死锁问题
- myeclipse的编译和运行环境不一样引发webService异常
- 集合操作 异常处理
- 两个集合有共同元素,其中一个集合删除两个集合共同的元素
- 初始化引发的"StackOverflowError" 异常
- 中文输入引发的异常
- AndroidStdio-图片格式引发的异常
- 引发的异常:“System.FormatException"
- Qt操作xml引发内部异常(Qt5Xml.lib和Qt5Xmld.lib)
- Jsoup引发的异常java异常
- C++所有容器的共同操作
- 动态绑定
- 用户输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- WinDbg调试DMP格式文件
- 解析ISO8583报文实例
- Eclipse 中自动安装 Apachen Tomcat Server 插件
- 迭代器和集合共同操作引发的异常
- LeetCode::Two Sum C语言
- 在类的成员函数中调用delete this
- POJ 1759 - Garland(二分搜索)
- oc_study02
- 辣子工具LSUtils:一些好玩的函数
- 如何在自己的计算机上做一个web服务器
- 【2015自招必备】NOIP普及组阅读程序写结果题目汇编(含答案)
- E-Mail引领生活(实践篇二)