比方说,我有MyClass{ private LargeMatrix mtrx; hashCode(){...}}
图形数据结构
JGraphT(也许所有的图形数据结构)好像是用哈希表来顶点映射。那么当我使用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()
编辑: 矩阵可能是零,有时还是那些,它们随时间变化,所以我会尽力拿出与区分这些对象的东西,这似乎是愚蠢的解决方案。为什么不能通过那里的位置选择顶点或什么?
我应该重新发明轮子吗?用一个使用Vectors而不是哈希表的图表?或者有工作?
有时候这些矩阵可能是零,它们会随着时间而改变。所以我不会允许它通过散列码来选择 – 2011-03-23 13:54:52
l1和l2永远不会存储在内存中的不同位置。看到我上面的答案。 – rtperson 2011-03-23 13:58:46