图类型
Graph
Graph是最简单和最基本的图类型。它定义了用于处理节点到节点关系的基本操作,例如获取后继节点:successors(node),获取相邻节点:adjacentNodes(node)和获取节点的入度值:inDegree(node)。它的节点是第一类唯一对象,您可以将它们视为类似于将键映射到图形内部数据结构中。
MutableGraph<Integer> graph = GraphBuilder.undirected().build();
ValueGraph
ValueGraph是一个Graph的子类,它可以节点之间的边添加权值,将任意值与边相关联,类似于Map中的值。边的权值不需要是唯一的(因为节点是唯一的)。
例如:ValueGraph <Airport,TransitTime>,定义了一个有向图,其TransitTime对象各自表示从源机场到目的地机场所需的时间。由于两个不同机场对之间的过境时间可以相等,这使得ValueGraph比network更合适。
MutableValueGraph<Airport, TransitTime> roads = ValueGraphBuilder.directed().build();
network
network是一种独立的图类型(既不是图的子类型也不是超类型),它具有Graph所有与节点相关的方法,但也具有一类(唯一)边缘对象。边缘的唯一性约束允许网络本地支持平行边缘,以及处理边缘和节点到边缘关系的方法,例如outEdges(node),incidentNodes(edge)和edgesConnecting(nodeU,nodeV)。
network提供了一个asGraph()方法,它返回network的图形视图。这允许在Graph实例上操作的方法也用于network实例。
MutableNetwork<Status,Work> statusNetWork = NetworkBuilder.directed().build();
选择正确的图表类型
三种图形类型之间的本质区别在于它们的边表示。
Graph的边是节点之间的匿名连接,没有自己的身份或属性。如果每对节点最多由一个边连接,并且不需要将任何信息与边相关联,则您应该使用Graph。
ValueGraph具有具有可以是或可以不是唯一的值(例如,边权重或标签)的边。如果每对节点最多由一个边连接,并且您需要将信息与可能对于不同边(例如边权重)相同的边相关联,则您应该使用ValueGraph。
network具有作为唯一对象的边,就像节点一样。如果边缘对象是唯一的,并且您希望能够发出引用它们的查询,则应使用network。 (请注意,这个唯一性允许Network支持平行边(parallel edges)。)
创建图类型
要创建图形类型的内置实现之一的实例,请使用相应的Builder类:GraphBuilder,ValueGraphBuilder或NetworkBuilder。
可以通过以下两种方式之一获取图形生成器的实例:
调用静态方法directed()或者undirected()。 Builder提供的图实例将指定为有向或无向图。<