I have a working int Topological sorting class. but I need to change my methods to take string "a", "b" instead of integers, but the problem is that the methods that also count the nodes are also being used for the arraylist so I've been trying for weeks just to change or but it always says bad conversion, or cannot be converted to int, even when there isn't an int in my class(at one point) so my problem is all I want is for it to say q.addEdge("a","b"); here is my code, any help at all maybe to turn this into nodes or strings and I would be forever in your debt.
// A Java program to print topological sorting of a graph
// using indegrees
import java.util.*;
//Class to represent a graph
class Graph
{
int V;// No. of vertices
//An Array of List which contains 
//references to the Adjacency List of 
//each vertex
List <Integer> adj[];
public Graph(int V){//constructor
    this.V = V;
    adj = new ArrayList[V];
    for(int i = 0; i < V; i++)
        adj[i]=new ArrayList<Integer>();
}   
// function to add an tasks to tree
public void addEdge(int u,int v){
    adj[u].add(v);
}
// prints a Topological Sort of the complete graph  
public void topologicalSort(){
    // Create a array to store indegrees of all
    // vertices. Initialize all indegrees as 0.
    int indegree[] = new int[V];
    // Traverse adjacency lists to fill indegrees of
    // vertices. This step takes O(V+E) time        
    for(int i = 0; i < V; i++){
        ArrayList<Integer> temp = (ArrayList<Integer>) adj[i];
        for(int node : temp){
            indegree[node]++;
        }
    }
    // Create a queue and enqueue all vertices with
    // indegree 0
    Queue<Integer> q = new LinkedList<Integer>();
    for(int i = 0;i < V; i++){
        if(indegree[i]==0)
            q.add(i);
    }    
    // Initialize count of visited vertices
    int cnt = 0;
    // Create a vector to store result (A topological
    // ordering of the vertices)
    Vector <Integer> topOrder=new Vector<Integer>();
    while(!q.isEmpty()){
        // Extract front of queue (or perform dequeue)
        // and add it to topological order
        int u=q.poll();
        topOrder.add(u);
        // Iterate through all its neighbouring nodes
        // of dequeued node u and decrease their in-degree
        // by 1
        for(int node : adj[u]){
            // If in-degree becomes zero, add it to queue
            if(--indegree[node] == 0)
                q.add(node);
        }
        cnt++;
    }  
    // Check if there was a cycle       
    if(cnt != V){
        System.out.println("There exists a cycle in the graph");
        return ;
    }//else{System.out.println("no cycle in the graph");}
    // Print topological order          
    for(int i : topOrder){
        System.out.print(i+" ");
    }
 }
}
// Driver program to test above functions
class Main
{
public static void main(String args[])
{
    Graph g=new Graph(8);//must be max number of letters+1
    Node one=new Node("a");
    Node two=new Node("b");
    g.addEdge(one,two);
   /*
    g.addEdge(1, 4);
    g.addEdge(2, 5);
    g.addEdge(7, 5);
    g.addEdge(5, 4);
    g.addEdge(3, 4);
    g.addEdge(4, 6);
    g.addEdge(2, 4);*/
    System.out.println("Following is a Topological Sort");
    g.topologicalSort();
 }
 }
 
    