索引
链接
https://mp.weixin.qq.com/s/gyf08otJYg3WgmCMenH-dg
文章截图
简评
这篇文章挺有意思的,里面说了好几种因为“认为修改的不是一个list但实际修改的是一个list”造成的异常。工作中我真的遇到过一种造成过线上问题,就是subList那个。关于list的使用确实有很多坑啊。
总结就是不确定是不是修改的新的list,但你想要的是不影响原list时,就该用new ArrayList(原list)这种方式强行让新的list和原list无关。不过,虽然一直这样用,刚看了下这个方法的源码,里面使用了Arrays.copyOf这个方法,对这个方法有印象,不过忘了有什么玄机了。。
文章里面最后留了个思考题,为什么把那个改成2就不报异常了,是因为remove后,list大小变成了2,在判断iterator.hasNext()时就退出了,而根本不会走到可能会抛出ConcurrentModificationException异常的next方法!
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/1574