小站重新装修,欢迎到访。
查看源代码

记一个Iterator的异常

今天在一个熟悉的场景首次遇到了异常,在使用ArrayList的Iterator时,抛出了java.lang.IllegalStateException。仔细分析后,发现是一个不合适的循环嵌套,导致了it.remove()连续调用了两次。结合源码看了下,AbstractList$Itr类使用了一个int lastRet变量标记最近一次next()所指向的元素,而在调用it.remove()时,先检查lastRet的值,如果为-1,则抛出IllegalStateException,否则将lastRet置为-1。用以保证一个元素只被remove一次。在Itr类的子类ListIterator里,previous()也是同样原理。

古人云:

吃一堑长一智

又云:

学如逆水行舟,不进则退

重点在吃和行两个字,讲究行动,一定要在实践中遇到困难,并解决,方能长一智,方能前进。对于码农,则一定是要多动手,多碰钉子,多独立解决问题,如是自勉。

博主是一个不是很聪明的码农。完美主义者,强迫症中期。这里会记录一些回忆和点滴,以博为镜。

武器库:

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-SA 3.0  授权发布。最后生成于 2017-02-20.