The graph is very large but undirected. Edges are unweighted.
In my implementation, I have to find the vertex with max degree and do deletion on both vertexes and edges.
If your algorithm requires looking up on max degree, then you want a data structure ordered by degree, something like a PriorityQueue would be good.
Then you need to store the graph itself. For deletion quickly I'd recommend something like a Sparse Array structure. If you have to use java.util data structures, then a HashMap
from vertexes to the list of connected vertexes offers O(1) deletion.
If you could use 3rd party libraries, then there are a list of answers here of which JGraph and JUNG seem most popular.
public class Graph {
private Set<Vertex>vertices;
private Set<Edge>edges;
private Map<Vertex,List<Edge>>adj;
// Getter setter
public Graph(Set<Vertex> vertices, Set<Edge> edges, Map<Vertex, List<Edge>> adj) {
super();
this.vertices = vertices;
this.edges = edges;
this.adj = adj;
}
}
// Vertex class
public class Vertex {
private String name;
public Vertex(String name) {
super();
this.name = name;
}
}
// Edge class
public class Edge {
private Vertex from;
private Vertex to;
private int weight;
public Edge(Vertex from, Vertex to,int weight) {
super();
this.from = from;
this.to = to;
this.weight = weight;
}
}
// Driver class
import java.util.HashSet;
import java.util.Set;
public class Test {
public static void main(String[]args) {
Graph gr = new Graph();
Vertex a = new Vertex("a");
Vertex b = new Vertex("b");
Vertex c = new Vertex("c");
Vertex d = new Vertex("d");
Vertex e = new Vertex("e");
Vertex f = new Vertex("f");
Vertex g = new Vertex("g");
Set<Vertex>vertices = gr.getVertices();
if(vertices == null){
vertices = new HashSet<>();
vertices.add(a);
vertices.add(b);
vertices.add(c);
vertices.add(d);
vertices.add(e);
vertices.add(f);
vertices.add(g);
}
Edge ae = new Edge(a, e, 3);
Edge ac = new Edge(a, c, 1);
Edge cf = new Edge(c, f, 9);
Edge cd = new Edge(c, d, 4);
Edge eb = new Edge(e, b, 2);
Edge bd = new Edge(b, d, 5);
Edge df = new Edge(d, f, 7);
Set<Edge>edges = gr.getEdges();
if(edges == null){
edges = new HashSet<Edge>();
edges.add(ae);
edges.add(ac);
edges.add(cf);
edges.add(cd);
edges.add(eb);
edges.add(bd);
edges.add(bd);
}
gr.setVertices(vertices);
gr.setEdges(edges);
}
}