Java开发工程师是怎样炼成的------ArrayList(1)
来源:互联网 发布:热水器 类型 知乎 编辑:程序博客网 时间:2024/03/29 15:47
看看下面的代码:
import java.util.*;
public class FailFast ...{
public static void main(String[] args) ...{
List c = new ArrayList();
c.add("1");
c.add("2");
for(int i=0;i<c.size();i++)...{
System.out.println("c.size():"+c.size());
if(i==0)...{c.add("An object");}
System.out.println(c.get(i));
}
}
}
public class FailFast ...{
public static void main(String[] args) ...{
List c = new ArrayList();
c.add("1");
c.add("2");
for(int i=0;i<c.size();i++)...{
System.out.println("c.size():"+c.size());
if(i==0)...{c.add("An object");}
System.out.println(c.get(i));
}
}
}
当你运行这段代码的时候,你就会领略到这段代码的有趣之处了。程序是这样测试的:
1.建立一个ArrayList
2..添加两个字符串。
3.用一个循环将ArrayList中的东西打印出来,问题就在循环体内。在第一次循环的时候,我往容器中添加了一个字符串。结果在第二次循环的是时候,它就判断出,容器里字符串的个数变化了。
再看下面的一个程序
import java.util.*;
public class FailFast ...{
public static void main(String[] args) ...{
List c = new ArrayList();
c.add("1");
c.add("2");
Iterator it = c.iterator();
c.add("An Object");
String s = (String)it.next();
}
}
public class FailFast ...{
public static void main(String[] args) ...{
List c = new ArrayList();
c.add("1");
c.add("2");
Iterator it = c.iterator();
c.add("An Object");
String s = (String)it.next();
}
}
这段程序代码使用了迭代器。结果回返回异常:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at FailFast.main(FailFast.java:13)
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at FailFast.main(FailFast.java:13)
原因:
JAVA容器有一个机制(FAIL FAST),可以防止多个进程修改同一个容器的内容。如果你正在走访某个容器,另一个进程却要进行元素的安插、删除、修改等动作,便会发生问题。JAVA容器会查找“因你的进程而做的任何改变”之外的所有容器变化。如果它侦测到其他进程也在修改同一个容器,就会立刻产生一个java.util.ConcurrentModificationException。然而当你运用GET()来访问List的元素时,无法从此类监看动作中得到好处。
- Java开发工程师是怎样炼成的------ArrayList(1)
- Java开发工程师是怎样炼成的------按钮篇(Buttons)之一
- Java开发工程师是怎样炼成的------按钮篇(Buttons)之二
- Java开发工程师是怎样炼成的------按钮篇(Buttons)之三
- Java开发工程师是怎样炼成的------文本块篇(Text fields)
- Java开发工程师是怎样炼成的------边框篇(Borders)
- 嵌入式工程师是怎样炼成的
- 嵌入式工程师是怎样炼成的
- 嵌入式工程师是怎样炼成的(一)---- 引言
- 嵌入式工程师是怎样炼成的(一)---- 引言
- 嵌入式工程师是怎样炼成的(二)---- 初来乍到
- 嵌入式工程师是怎样炼成的(三)---- 初涉职场
- 嵌入式工程师是怎样炼成的(四)---- 奋发图强
- 嵌入式工程师是怎样炼成的(一)---- 引言
- 嵌入式工程师是怎样炼成的(二)---- 初来乍到
- 嵌入式工程师是怎样炼成的(三)---- 初涉职场
- 嵌入式工程师是怎样炼成的(四)---- 奋发图强
- 嵌入式工程师是怎样炼成的(一)---- 引言
- 攻克日语难关的十大原则
- 给网页加背景音乐
- 什么是托管
- 学习日语入门须知
- 为网页中控件增加快捷键访问
- Java开发工程师是怎样炼成的------ArrayList(1)
- 日语动词活用巧记忆
- JAVA之精髓IO流
- 掌握java中的"包"机制
- ASP程序应用之模板采用
- 忘记XP登陆密码怎样登陆?
- 生活有了目标,终于也能看进去书了,happy啊~
- 经典实用的基础asp程序整理
- 新的Google中文输入法 pk Microsoft中文输入法