删除正在循环迭代的集合元素的分析
来源:互联网 发布:网络视频转换器 编辑:程序博客网 时间:2024/05/18 02:17
public class IteratorTest {
public static void main(String[] args) {
//List的元素不能使用原集合删除,一定要使用迭代器删除
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("world");
list.add("helloWorld");
list.add("helloWorld2");
//=======================可以正常操作的情况=========================================================================
// 1,通过迭代器删除:ok。
// for (Iterator iterator = list.iterator(); iterator.hasNext();) {
// String string = (String) iterator.next();
// System.out.println(string);
// iterator.remove();
// }
// System.out.println(list.size());
//========================异常情况及分析======================================================
// 1,直接remove Object发发生异常:java.util.ConcurrentModificationException
// 第一次循环时,可以正常删除(因为这时的list还没有改变);第二次循环时,再删除就会报异常。
// 如果只有两个元素,删除一次后就不再循环,所以不会报异常。
// AbstractList的方法(每次循环时都会调用这个方法,先判断,再往下循环,所以如何集合改变了,就。。。。):
// final void checkForComodification() {
// if (modCount != expectedModCount)
// throw new ConcurrentModificationException();
// }
// for(String s:list)
// {
// System.out.println(s);
// list.remove(s);
// }
//2,异常类型:java.lang.IndexOutOfBoundsException
//由于面向对象的性质决定的,删除后,正在的迭代的集合中后面的元素就会补上来
// for(int i=0,size=list.size();i<size;i++)
// {
// System.out.println(list.get(i));
// list.remove(list.get(i));
// }
//3,或者如下;这种不会报异常,但是却不是想要的结果。原因还是删除当前元素后,后面的元素会马上补上来。
// for(int i=0;i<list.size();i++)
// {
// System.out.println(list.get(i));
// list.remove(list.get(i));
// }
// 4,再或者如下: 跟上面的情况一样。
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
list.remove(i);
}
}
}
参考:http://leepoint.net/notes-java/flow/loops/foreach.html
<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:黑体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimHei;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:1 135135232 16 0 262144 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:Verdana;panose-1:2 11 6 4 3 5 4 4 2 4;mso-font-charset:0;mso-generic-font-family:swiss;mso-font-pitch:variable;mso-font-signature:536871559 0 0 0 415 0;}@font-face{font-family:"/@黑体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;}h2{mso-style-next:正文;margin-top:13.0pt;margin-right:0cm;margin-bottom:13.0pt;margin-left:49.6pt;text-align:justify;text-justify:inter-ideograph;text-indent:-1.0cm;line-height:173%;mso-pagination:lines-together;page-break-after:avoid;mso-outline-level:2;mso-list:l0 level2 lfo1;tab-stops:list 49.6pt;font-size:16.0pt;font-family:Arial;mso-fareast-font-family:黑体;mso-bidi-font-family:"Times New Roman";mso-font-kerning:1.0pt;}h3{mso-style-next:正文;margin-top:13.0pt;margin-right:0cm;margin-bottom:13.0pt;margin-left:70.9pt;text-indent:-1.0cm;line-height:173%;mso-pagination:lines-together;page-break-after:avoid;mso-outline-level:3;mso-list:l0 level3 lfo1;tab-stops:list 70.9pt;font-size:16.0pt;font-family:"Times New Roman";mso-font-kerning:1.0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:612.0pt 792.0pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:36.0pt;mso-footer-margin:36.0pt;mso-paper-source:0;}div.Section1{page:Section1;} /* List Definitions */ @list l0{mso-list-id:1020426243;mso-list-template-ids:-865962576;}@list l0:level1{mso-level-text:%1;mso-level-tab-stop:21.25pt;mso-level-number-position:left;margin-left:21.25pt;text-indent:-21.25pt;}@list l0:level2{mso-level-style-link:"标题 2";mso-level-text:"%1/.%2";mso-level-tab-stop:49.6pt;mso-level-number-position:left;margin-left:49.6pt;text-indent:-1.0cm;}@list l0:level3{mso-level-style-link:"标题 3";mso-level-text:"%1/.%2/.%3";mso-level-tab-stop:70.9pt;mso-level-number-position:left;margin-left:70.9pt;text-indent:-1.0cm;}@list l0:level4{mso-level-text:"%1/.%2/.%3/.%4";mso-level-tab-stop:99.2pt;mso-level-number-position:left;margin-left:99.2pt;text-indent:-35.4pt;}@list l0:level5{mso-level-text:"%1/.%2/.%3/.%4/.%5";mso-level-tab-stop:127.55pt;mso-level-number-position:left;margin-left:127.55pt;text-indent:-42.5pt;}@list l0:level6{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6";mso-level-tab-stop:163.0pt;mso-level-number-position:left;margin-left:163.0pt;text-indent:-2.0cm;}@list l0:level7{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7";mso-level-tab-stop:191.35pt;mso-level-number-position:left;margin-left:191.35pt;text-indent:-63.8pt;}@list l0:level8{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8";mso-level-tab-stop:219.7pt;mso-level-number-position:left;margin-left:219.7pt;text-indent:-70.9pt;}@list l0:level9{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8/.%9";mso-level-tab-stop:255.1pt;mso-level-number-position:left;margin-left:255.1pt;text-indent:-85.0pt;}ol{margin-bottom:0cm;}ul{margin-bottom:0cm;}-->
1 General Form
The for-eachand equivalent for statements have these forms. The two basic equivalentforms are given, depending one whether it is an array or an Iterablethat is being traversed. In both cases an extra variable is required, an indexfor the array and an iterator for the collection.
For-each loop
Equivalent for loop
for (type var : arr) {
body-of-loop
}
for (int i = 0; i < arr.length; i++) {
type var = arr[i];
body-of-loop
}
for (type var : coll) {
body-of-loop
}
for (Iterator<type> iter = coll.iterator(); iter.hasNext(); ) {
type var = iter.next();
body-of-loop
}
- 删除正在循环迭代的集合元素的分析
- 集合迭代删除元素
- 循环遍历中删除集合的元素
- 在循环中删除集合的元素
- vector 的迭代和删除元素
- 关于迭代集合同时删除元素报错的问题java.util.ConcurrentModificationException
- 循环的时候如何安全地删除java集合的元素
- for循环中删除集合元素的问题
- 循环删除集合中符合条件的元素
- 集合元素的删除
- 《黑马程序员》 集合中的元素的迭代方式
- 关于集合迭代元素的五种用法?
- java集合迭代删除,一个很诡异的现象
- for循环操作集合,及增删改查,和增强for循环的循环迭代
- 集合循环时删除元素
- 循环删除list集合元素
- 集合中元素的删除
- 集合元素的删除方法
- QDBJ000
- 高级弹出框
- js多个int类型数据相加求和
- [转载]ELF文件格式
- .NET(C#)中静态方法或实例方法中调用静态成员或者实例成员,有几种情况?
- 删除正在循环迭代的集合元素的分析
- 在内容页中怎么获取master页的控件引用
- .NET(C#)中图片的下载方法
- 2010.3-2010.5 nsTorrent
- Qt 点击窗口外部关闭窗口
- [IE9] GPU硬件加速到底是实用创新还是噱头
- 登录Linux时/etc/profile、~/.bash_profile等几个文件的执行过程
- poj2226——Muddy Fields
- 源代码文档生成 Doxygen介绍(转载)