主要问题
我有一个充满顶点对象的哈希图。基于一个整数(即 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);
}
}
输出:
空
2
正如您在上面看到的,它适用于 Integer 对象,但不适用于用户定义的 Vertex 对象。我也覆盖了 equals 方法。
附加信息
我有一个文本文件。第一列表示边的尾部。第二个边缘的头部。这是摘录:
1 1
1 2
1 8
1 4
2 47646
2 47647
...
我预加载顶点 1 - n 因为......嗯......我无法每次都检查我的地图的键集以查看顶点是否已经存在。
无论如何,那么,基于这个文本文件,我需要找到 id 为“x”的顶点并添加一条边。
您可能会问为什么我不使用 Integer 对象作为键。许多在线示例都使用了通用 V 对象,这很有意义 --- 每个节点 (irl) 都会有额外的信息,无论是停靠点的名称还是其他信息。