比方說,我有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