JUNG - Как получить точную вершину в графе? - PullRequest
2 голосов
/ 25 декабря 2009

Мне нужно создать граф с его самоопределяемым типом узла, а узлы и соединения считываются из txt файла один за другим.

Формат файла выглядит следующим образом: startNode attibutes endNode.

Каждый раз, когда я читаю одну строку, я создавал 2 объекта узла: startNode и endNode. и добавить ребро между ними ..

Однако startNode может существовать в несколько строк.

например. V1 ... V2; V1 ... V3

Поэтому, прежде чем добавлять ребра, я должен проверить, содержал ли мой граф узел, и мне следует использовать вершину в графах вместо вновь созданного узла.

Есть ли у Юнга какой-либо встроенный метод для решения этой проблемы? Или есть предложения?

Ответы [ 2 ]

2 голосов
/ 18 марта 2011

Короткий ответ таков: по контракту реализации графических функций JUNG позаботятся об этом за вас, если реализации ваших пользовательских узлов / ребер equals() и hashCode() делают все правильно.

Если вы попытаетесь добавить вершину в граф, и она уже присутствует в графе, метод addVertex() вернет false (что означает «ничего не сделано»), как и в аналогичном методе add() в Set.

Также обратите внимание, что методы addEdge() добавят связанные вершины в граф для вас, если их еще нет.

1 голос
/ 19 января 2010

JUNG считает вершины (и ребра) разными, если они ссылаются на разные объекты. Если вы создадите два объекта вершин с одинаковыми свойствами, они будут рассматриваться как разные вершины, и вы сможете вставить их оба в граф. В JUNG нет метода equals, который можно переопределить (для проверки свойств объекта вершины), чтобы проверить, являются ли два объекта вершины одинаковыми или нет. Поэтому вам нужно вручную поддерживать список вершин (и ребер) в вашем графе, чтобы избежать добавления вершины, уже имеющейся в вашем графе. Однако вы можете легко сделать это с помощью HashMap (если ваш график не слишком большой).

...