Допустим, у меня есть MyClass{ private LargeMatrix mtrx; hashCode(){...}}
JGraphT (возможно, все структуры данных Graph), похоже, использует Hash-таблицу для отображения вершин. Так повлияет ли это на скорость, когда я использую MyClass вместо String l1,l2,l3
?
Какие плюсы и минусы в этом случае? Должен ли я переопределить хэш-код (удалить хэш-код матрицы)? Есть ли график, который использует ссылки вместо хеш-таблицы?
так Мой код был:
package ann;
import org.jgrapht.DirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleDirectedGraph;
/**
* @author marmoush
*
*/
public class Network
{
DirectedGraph<String, DefaultEdge> diGraph;
String l1="hello1";
String l2="hello1";
String l3="hello3";
/**
*
*/
public Network()
{
diGraph = new SimpleDirectedGraph<String, DefaultEdge>(DefaultEdge.class);
diGraph.addVertex(l1);
diGraph.addVertex(l2);
diGraph.addVertex(l3);
diGraph.addEdge(l1, l2);
System.out.println(diGraph.containsEdge(l1,l2));
// TODO Auto-generated constructor stub
}
}
Exception in thread "main" java.lang.IllegalArgumentException: loops not allowed
at org.jgrapht.graph.AbstractBaseGraph.addEdge(Unknown Source)
at ann.Network.<init>(Network.java:28)
at test.TestNetwork.main(TestNetwork.java:9)
Потому что (я думаю) l1.hashCode()==l2.hashCode()
EDIT:
Иногда матрицы могут быть нулями или единицами, они меняются со временем, поэтому я бы попытался придумать что-то, что отличает эти объекты, и это кажется глупым решением. Почему граф не может просто выбрать вершины по положению в векторе или чем-то еще?
Должен ли я заново изобрести колесо? с графиком, который использует Векторы вместо хеш-таблиц? или есть работа вокруг?