Java-使用邻接列表实现的图的节点与整数

Java-使用邻接列表实现的图的节点与整数,java,graph,nodes,adjacency-list,adjacency-matrix,Java,Graph,Nodes,Adjacency List,Adjacency Matrix,我在为技术面试而学习,图表对我来说有点难。我对邻接矩阵很简单,但对邻接列表的实现感到困惑 问题是我在线看到的大多数邻接列表的实现(,和)根本不使用节点。他们只使用Int和LinkedList的HashMap。这是正确的吗?因为定义()说它由顶点或节点组成。此外,大多数使用邻接矩阵的图的实现都使用节点,而不是整数。我是不是错过了什么?这个谜题是什么 我知道使用INT而不是节点更节省空间,但是它会导致更多的复杂性。例如,查看示例1中的这段代码- // add edge from vertices v

我在为技术面试而学习,图表对我来说有点难。我对邻接矩阵很简单,但对邻接列表的实现感到困惑

问题是我在线看到的大多数邻接列表的实现(,和)根本不使用节点。他们只使用Int和LinkedList的HashMap。这是正确的吗?因为定义()说它由顶点或节点组成。此外,大多数使用邻接矩阵的图的实现都使用节点,而不是整数。我是不是错过了什么?这个谜题是什么

我知道使用INT而不是节点更节省空间,但是它会导致更多的复杂性。例如,查看示例1中的这段代码-

// add edge from vertices v1 to v2
void addEdge(int v1,int v2){
adj.get(v1).add(v2);
}
其目的是将边从v1添加到v2。它完全忽略了可能存在多个具有相同int值的顶点的可能性,在这种情况下,addEdge()方法可能会在意外顶点之间添加边

那么,示例1、2、3中邻接列表的实现是否错误?如果他们是对的,那么如果我使用节点而不是整数实现邻接列表,这会不会很糟糕?我不想让我的面试官认为我是个白痴,哈哈,你可以直接使用Node(包含数据类型)或datatype(在你的例子中是Integer),它们都可以工作

但是,由于以下几个原因,使用Node是一个更好的选择

  • 避免您正确提到的重复数据值问题
  • 使用节点更面向对象。它允许Graph类处理节点持有的任何数据类型。这使得代码更具可移植性,因为图形可以处理字符串、Long、Integer等
  • 为了利用我上面提到的可移植性,应该像这样定义一个节点类

    class Node<T>{
        T data;
    }
    
    类节点{
    T数据;
    }
    
  • 因此,您应该在访谈中始终使用节点(包含数据类型),因为它看起来更好,并且表明您关心设计适当的代码

    希望有帮助