1.在迭代过程中,用list来删除元素的坑

 1 package test;
2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6
7 public class IteratorTest {
8
9 public static void main(String[] args) {
10 List<String> list = new ArrayList<>();
11 list.add("hello");
12 list.add("world");
13 list.add("helloworld");
14
15 for(Iterator<String> i = list.iterator(); i.hasNext();) {
16
17 /**
18 * Iterator里有维护2个变量 cursor(表示当前的数组的索引值)、lastRet(表示上一个元素的索引值)
19 * 就是说,迭代器获取值(next()方法)的时候,其实执行的就是list.get(cursor)
20 *
21 * 而arraylist里,维护了个变量——modCount,表示的是list的修改次数(增加、修改、删除的次数),
22 * 在Iterator里,又维护了个变量——exoectedModCount,它的初始值就是list的modCount
23 * 在Iterator的next()方法里,会检查modCount是否等于exoectedModCount,不相等,将抛出异常
24 * 在调用了list.remove方法之后,modCount值加了1,但是没反映到Iterator,报错
25 */
26 String s = i.next(); // 第二次执行到这里的时候,会抛异常
27 System.out.println(s);
28
29 list.remove("helloworld");
30 }
31
32
33 List<String> list2 = new ArrayList<>();
34 list2.add("hello");
35 list2.add("world");
36 list2.add("helloworld");
37
38 for (int i = 0; i < list.size(); i++) {
39 // 这里想删除全部元素,是错误的
40 // 这里删除了元素以后,会影响list.size()的取值,list.size()会一直减小
41 list.remove(i);
42 }
43
44 }
45
46 }

最新文章

  1. Java 开发主流 IDE 环境体验
  2. Linux随笔之——./configure、make、make install(转)
  3. 基于Ruby的watir-webdriver自动化测试方案与实施(五)
  4. Socket重叠IO
  5. 队列理论和队列网络模型 queueing theory and queueing network model
  6. Ubuntu通过APT配置开发环境
  7. 粵語/廣東話/Cantonese 資料/Material
  8. 无线端web开发学习总结
  9. 火狐浏览器对border-radius的渲染问题
  10. Jam&#39;s math problem(思维)
  11. 一个简单的AMD模块加载器
  12. java--基于socket的网络传输开发
  13. BZOJ 3790: 神奇项链 [Manacher 贪心]
  14. 【一天一道LeetCode】#64. Minimum Path Sum.md
  15. [Abp vNext 源码分析] - 1. 框架启动流程分析
  16. [再寄小读者之数学篇](2014-06-20 Beta 函数)
  17. [POJ2761]Feed the dogs
  18. 检查radio/checkbox是否至少选择一项
  19. [agc003F]Fraction of Fractal
  20. 开发 ASP.NET vNext 初步总结(使用Visual Studio 2015 Preview )

热门文章

  1. 洛谷P3906 Hoof Paper, Scissor (记忆化搜索)
  2. PyQt信号connect连接槽方法时报:native Qt signal is not callable错误
  3. Python中使用eval执行下面函数的结果怎么是字符串'10020'?
  4. Python学习随笔:PyCharm的错误检测使用及调整配置减少错误数量
  5. Office宏病毒免杀(1)
  6. 3、tensorflow变量运算,数学运算
  7. css之div中纯文字单行和多行垂直居中
  8. H5相关知识点整理
  9. Java为什么称为动态编译?
  10. ftp之filezilla使用记录