6-2这个错误无法复现

来源:5-7 同步容器-2

黎明的烬

2018-04-28

http://img.mukewang.com/szimg/5ae42f40000117a819200917.jpg

写回答

5回答

Jimin

2018-04-28

//img.mukewang.com/szimg/5ae441f80001e81b14340845.jpg

我重新运行了一下也是和预期一致的

你再确认一下你是测试的test2方法,当前这个代码应该是肯定有问题的

0
2
Jimin
回复
黎明的烬
能验证这个方法会造成异常就算达到目的了。不过我看你的注释稍微有点问题,不是不可以在iterator遍历时做删除,换种写法是可以的,只是这种写法会有问题
2018-04-28
共2条回复

风洛洛

2018-11-18

使用 iterator 迭代器的话, 调用remove是可以正常删除的。
老师这里讲的是为了 讲容器在动态遍历过程中,不能对原容器使用remove操作。

着重点不太一样。

0
0

xiaocui_0001

2018-09-28

test2 方法如果使用iterator.remove(); 就没有问题 但是如果直接删除的vector的话就会抛出异常。

0
0

黎明的烬

提问者

2018-04-28

//img.mukewang.com/szimg/5ae440940001db7711380781.jpg老师请看

0
1
慕标5379731
兄弟 你的vector添加的元素是132 老师的是123。 132不报错是因为当test2方法迭代到第二个元素3时候, 这时候删除元素,当前内部迭代器里的cursor(迭代器指针)的位置在2 而当前集合的elementCount(集合元素数量)也是2. 所以迭代器hasNext()执行返回false, 所以132的顺序在while循环里只执行两次就结束了。 而123的顺序却要执行4次, 因为在第三次的时候remove操作会改变elementCount的值为2, 但是当前cursor=3 hasNext判断二者不相等, 错误的认为还有元素,执行it.next()方法的时候会先执行checkForComodification方法 就会报错了。
2020-04-17
共1条回复

Jimin

2018-04-28

你好,发出你的代码来看看

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程