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 !

Add Comment
1 Answer(s)

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); 
Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.