2

我必须创建一个具有自定义节点类型的图形,并且节点和连接是从 txt 文件中一一读取的。

文件格式是这样的:startNode 属性 endNode。

每次阅读一行,我都会创建 2 个节点对象:startNode 和 endNode。并在它们之间添加边缘..

但是,startNode 可能存在于几行中。

例如 V1 ... V2 ; V1 ... V3

因此,在添加边之前,我必须检查我的图是否包含该节点。我应该使用图中的顶点而不是新创建的节点。

jung 有没有内置的方法来解决这个问题?或者有什么建议?

4

2 回答 2

2

简短的回答是:根据合同,只要您的自定义节点/边缘对象的实现equals()hashCode()做正确的事情,JUNG 的图形实现就会为您解决这个问题。

如果您尝试将顶点添加到图中并且它已经存在于图中,则该方法addVertex()将返回 false(意思是“没有完成”),就像.add()Set

另请注意,addEdge()如果连接的顶点尚不存在,这些方法将为您将连接的顶点添加到图中。

于 2011-03-18T18:46:31.460 回答
1

JUNG 认为顶点(和边)是不同的,只要它们被引用到不同的对象。如果您创建两个具有相同属性的顶点对象,它们将被视为不同的顶点,您将能够将它们都插入到图中。JUNG 没有可以覆盖的 equals 方法(以检查顶点对象的属性)来执行检查两个顶点对象是否相同。因此,您需要手动维护图形中的顶点(和边)列表,以避免添加图形中已有的顶点。但是,您可以使用 HashMap 轻松做到这一点(如果您的图表不是太大)。

于 2010-01-19T15:29:58.837 回答