java - 如何在Java中初始化HashMap中的Key类

标签 java

我有一个与 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/

相关文章:

java - 渲染 HTML 以在 Java 应用程序中显示

java - 如何在 java swing 库中浏览文件?

java - Socket-C服务器、Android客户端

Java 检查列表中的元素是否出现在所有事件中

java - Eclipse JDK 1.8 不工作

java - java中类之间如何共享变量

java - 连接 JDBC SQL 错误

java - 将 Activity 上下文传递给类文件

CollectionOfElements 上的 java.util.ConcurrentModificationException

用于从 MP3 文件中提取音频信息的 Java 库