【发布时间】:2021-01-26 23:19:20
【问题描述】:
我正在用 java 进行图形实现。我有以下问题:
我无法通过键从 HashMap 中获取值,这是一个模板化的类对象,
更准确地说,我需要获得一个值,其二进制表示中的键等于指定的键对象,但不是(它们在内存中具有不同的地址)。据我了解,get(..) 方法返回一个值,其键地址等于指定的值。如果不进行愚蠢的搜索,我不知道该怎么做。顺便说一句,我是用 C++ 写的,对 Java 的理解不是很好。
这是有问题的代码:
public void addEdge(V v1, V v2, E edg) {
nodes.get(new Vertex<V>(v1)).put(new Vertex<V>(v2), new Edge<E>(edg));
nodes.get(new Vertex<V>(v2)).put(new Vertex<V>(v1), new Edge<E>(edg));
}
这是整个代码:
import java.util.*;
class Vertex<Node> {
Node node;
int id;
Vertex(Node val) {
this.node = val;
}
Vertex(Node val, int id) {
this.node = val;
this.id = id;
}
}
class Edge<T> {
T value;
Edge(T val) {
this.value = val;
}
}
public class Graph<V, E> {
private Map<Vertex<V>, HashMap<Vertex<V>, Edge<E>>> nodes;
Graph() {
nodes = new HashMap<Vertex<V>, HashMap<Vertex<V>, Edge<E>>>();
}
public void addVertex(V ver, int id) {
nodes.put(new Vertex<V>(ver, id), new HashMap<Vertex<V>, Edge<E>>());
}
public void addEdge(V v1, V v2, E edg) {
nodes.get(new Vertex<V>(v1)).put(new Vertex<V>(v2), new Edge<E>(edg));
nodes.get(new Vertex<V>(v2)).put(new Vertex<V>(v1), new Edge<E>(edg));
}
public V getNode(int id) {
for(Vertex<V> el: nodes.keySet())
if(el.id == id)
return el.node;
return null;
}
}
【问题讨论】:
标签: java dictionary object hashmap