List中remove方法的错误引用分析
在完成Java任务的过程中,遇到了这样的一个问题,我们看下图中的代码示例。
这里我们对edges 进行了for each循环,在这之后我想经过判断,对edges中的对象进行删除,但是编译器在运行时报出了错误

报错情况:

上面提示的是一个并发修改异常错误
分析之后得出主要原因是我们在删除的时候是通过ArrayList的remove方法去操作的,而我们本身实现的就是一个ArrayList接口,每次修改也都会改变当前的值,而再次进行比较的时候这个list就发生了改变,从而引发了错误。解决的方法是我们可以使用一个迭代器来帮助我们进行实现。

Iterator接口的remove方法将会删除上次调用next方法时返回的元素。在大多数情况下,这是有道理的,在决定删除某个元素之前应该先看下这个元素。不过如果想要删除这个指定的元素,仍需要越过这个元素。next方法和remove方法之间的调用存在依赖性。如果调用remove之前没有调用next这将会是不合法的。如果这样做,会抛出一个IllegalStateException异常。
public boolean remove(L vertex) { boolean flag = false; if (vertices.contains(vertex)) { vertices.remove(vertex); flag = true; } for(Iterator<Edge<L>> edg = edges.iterator();edg.hasNext();) { Edge<L> edge = edg.next(); if(edge.getSource().equals(vertex)||edge.getTarget().equals(vertex)) { edg.remove(); } }
上面的这段代买是我们改正之后的形式,功能相同,且可以正确的执行。
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号