How to delete a Edge properly in JGraphT?
I want to traverse the graph to find a certain edge, then delete the edge. After that I want traverse the remained graph again, find another edge by some special rules, delete the edge and so on.
The error occurs whenever an edge of a node has already been deleted and I try to read the next edge of the current node.
This is my code:
Graph<Transmitter, DefaultWeightedEdge> g = new DefaultUndirectedWeightedGraph<>(DefaultWeightedEdge.class); //compute the minimum spanning tree of the graph network SpanningTreeAlgorithm.SpanningTree<DefaultWeightedEdge> minSpanningTree = new PrimMinimumSpanningTree<>(g).getSpanningTree(); //delete not necessary edges for(Transmitter t: g.vertexSet()) { for (DefaultWeightedEdge edge: g.edgesOf(t)) { if (!minSpanningTree.getEdges().contains(edge)) { g.removeEdge(edge); } } }
When I run the code, I get this problem:
Exception in thread "main" java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1012) at java.base/java.util.ArrayList$Itr.next(ArrayList.java:966) at java.base/java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1049) at Aufgabe2.RadioNetwork.main(RadioNetwork.java:149)
Thanks in advance !
You can’t remove something from an iterator, while iterating over it. You could do something like this:
List<DefaultWeightedEdge> edgesToRemove=new ArrayList<>(); for(Transmitter t: g.vertexSet()) { for (DefaultWeightedEdge edge: g.edgesOf(t)) { if (!minSpanningTree.getEdges().contains(edge)) { edgesToRemove.add(g); } } } g.removeAllEdges(edgesToRemove);