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