#### Graphs

A
```package com.thealgorithms.datastructures.graphs;

import java.util.ArrayList;

ArrayList<Vertex> vertices;

vertices = new ArrayList<>();
}

private class Vertex {

E data;

Vertex(E data) {
this.data = data;
}

for (Vertex v : adjacentVertices) {
if (v.data.compareTo(to.data) == 0) {
return false; // the edge already exists
}
}
}

// use indexes here so it is possible to
// remove easily without implementing
// equals method that ArrayList.remove(Object o) uses
for (int i = 0; i < adjacentVertices.size(); i++) {
return true;
}
}
return false;
}
}

/**
* this method removes an edge from the graph between two specified
* vertices
*
* @param from the data of the vertex the edge is from
* @param to the data of the vertex the edge is going to
* @return returns false if the edge doesn't exist, returns true if the edge
* exists and is removed
*/
public boolean removeEdge(E from, E to) {
Vertex fromV = null;
for (Vertex v : vertices) {
if (from.compareTo(v.data) == 0) {
fromV = v;
break;
}
}
if (fromV == null) {
return false;
}
}

/**
* this method adds an edge to the graph between two specified vertices
*
* @param from the data of the vertex the edge is from
* @param to the data of the vertex the edge is going to
* @return returns true if the edge did not exist, return false if it
*/
public boolean addEdge(E from, E to) {
Vertex fromV = null;
Vertex toV = null;
for (Vertex v : vertices) {
if (from.compareTo(v.data) == 0) { // see if from vertex already exists
fromV = v;
} else if (to.compareTo(v.data) == 0) { // see if to vertex already exists
toV = v;
}
if (fromV != null && toV != null) {
break; // both nodes exist so stop searching
}
}
if (fromV == null) {
fromV = new Vertex(from);
}
if (toV == null) {
toV = new Vertex(to);
}
}

/**
* this gives a list of vertices in the graph and their adjacencies
*
* @return returns a string describing this graph
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Vertex v : vertices) {
sb.append("Vertex: ");
sb.append(v.data);
sb.append("\n");
for (Vertex v2 : v.adjacentVertices) {
sb.append(v2.data);
sb.append(" ");
}
sb.append("\n");
}
return sb.toString();
}
}

public final class Graphs {
private Graphs() {
}

public static void main(String[] args) {