最近在新公司写需求,然后产生了一个bug,显示查询权限没有,我很纳闷,开始以为确实是这个用户没有权限,一直在业务层面上纠结问题产生的原因。后来一步步debug,才发现,在前人的基础上写代码,很难受。发现了这个问题(特想把之前的程序员抓过来,然后打一顿!)
大家先看看我标注的方框,思考一下,这样写真的好吗?
我相信资深的程序员是不习惯这个样写法的,具体为什么呢?
产生的原因大家也应该有点思路了,不会一脸懵逼了。
那么现在我们究其根本来看看:
关于remove():删除此列表中指定位置的元素(可选操作)。 将任何后续元素向左移位(减去一个元素来自他们的指数)。 返回从中删除的元素清单。
那么关键点就在这了,他删除了此列表中指定位置的元素。其后的后续元素将会向左移动,这样的话,那么就会出现下标溢出异常。从而产生并发修改异常。
对于解决办法,我个人给出一种最为简单的理解的方法:
1.就是将“我们要删除的元素不管,用一个全新的List来接收你不需要删除的元素就行了”
2.第二种就是加锁了,
3.要么就是使用Map中的迭代器进行遍历
第二种第三种方法具体实现我就不给出了,要有求知欲,而不是现拿现用。。