我有一个与 HashMap 中的键类型初始化相关的问题。例如,我定义了下面的 Node 类并重写了 equals() 和 hashCode(),如下所示:
public class Node implements Comparable<Node> {
private int Id;
public Node(int i) {
...
}
void setId(int i) {
Id = i;
}
int getId() {
return Id;
}
@Override
public boolean equals(Object o) {
if (o == null) {
throw new NullPointerException();
}
if (o instanceof Node && this != o) {
if (((Node) o).getId() == this.getId())
return true;
}
return false;
}
public int hashCode() {
return Id;
}
}
现在我正在构建一个键为 Node 类型的 HashMap,如下所示:
public class AdjList {
public HashMap<Node,Double> adj;
public AdjList() {
adj = new HashMap<Node,Double>(maxSize);
}
...
}
正如您可能想到的,我正在尝试生成一个节点类为 HashMap 的图邻接列表。
现在,我的问题是,当我调用 AdjList() 构造函数并在其中创建一个具有 maxSize 的新 HashMap 时,它会将 Node() 类初始化为键类型吗?或者我需要单独初始化 Node() 类的键?如果我需要在 AdjList 构造函数中初始化 Node(),那怎么可能呢?
任何建议都将是有值(value)的,有用的建议将得到奖励。
谢谢, 索姆纳特
最佳答案
when I call AdjList() constructor where I create a new HashMap with some maxSize, will it initialize the Node() class as key type?
不!您使用 initialCapacity
实例化 Map,它是 loadFactor 值,而不是 maxSize(请参阅文档)。
您可以在 AddList 中定义一个添加条目的方法。
public void add(int i,Double d)
{
adj.put(new Node(i),d);
}
其次,您已经实现了 Comparable,因此您必须定义 compareTo
方法。
关于java - 如何在Java中初始化HashMap中的Key类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9627923/