Java中List对象赋值操作问题
业务需求是:取2个集合中的交集对象并返回。如下代码,busMap中key值和stocks中Map中的key值相等的对象则返回继续操作,也就是说剔除stocks中的不存在于busMap中的对象,就是一个过滤操作。
实现代码 ① bug版
报错:
java.util.ConcurrentModificationException ; at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) ; at java.util.ArrayList$Itr.next(ArrayList.java:831) ;
原因:
forEach实现是采用Iterator实现的,而remove操作不能在Iterator下操作,所以报错,具体原因是Iterator遍历开始前,会对该对象生成一个改变前的标记值,在进行map.remove操作的时候,改变了这个值,导致循环结束后,程序检查初始标记和结束标记不一致,就报错了。而使用Iterator.remove操作时,它同时会修改这个初始标记值,一直让这个初始标记值等于当前标记值,程序结束后判断两者相等,就不会有异常!
private static void appendStock(Map busMap, List> stocks , String key){
if (stocks != null)
for (Map s : stocks ) {
boolean b = false;
for (Map.Entry e : busMap.entry