主な質問
頂点オブジェクトで満たされたハッシュマップがあります。整数 (つまり 1) に基づいて、その頂点オブジェクトを見つけたいと思います。以下のコードを参照してください。
public class Playground {
public static void main(String[] args) {
Map<Vertex, String> map1 = new HashMap<Vertex, String>();
Map<Integer, String> map2 = new HashMap<Integer, String>();
Vertex v1 = new Vertex(5);
map1.put(v1, "1");
Vertex v2 = new Vertex(5);
String s = map1.get(v2);
System.out.println(s);
Integer int1 = new Integer(1);
map2.put(int1, "2");
Integer int2 = new Integer(1);
String t = map2.get(int2);
System.out.println(t);
}
}
class Vertex{
public int id;
public Vertex(int id){
this.id = id;
}
@Override
public boolean equals(Object obj) {
Vertex v = (Vertex) obj;
return (this.id == v.id);
}
}
出力:
null
2
上記のように、Integer オブジェクトでは機能しますが、ユーザー定義の Vertex オブジェクトでは機能しません。equals メソッドもオーバーライドします。
追加情報
テキストファイルがあります。最初の列はエッジのテールを示します。2 番目のエッジの頭。以下は抜粋です:
1 1
1 2
1 8
1 4
2 47646
2 47647
...
頂点 1 ~ n をプリロードする理由は...そうです...頂点が既に存在するかどうかを確認するために毎回マップのキーセットをチェックできないからです。
とにかく、このテキスト ファイルに基づいて、ID "x" の頂点を見つけてエッジを追加する必要があります。
なぜ代わりに Integer オブジェクトをキーとして使用しないのかと疑問に思われるかもしれません。オンラインの多数の例で一般的な V オブジェクトが使用されており、それは理にかなっています --- 各ノード (irl) には、停留所の名前などの追加情報があります。