HashMap 和 int 作为键

新手上路,请多包涵

我正在尝试构建一个 HashMap,它将整数作为键,将对象作为值。

我的语法是:

 HashMap<int, myObject> myMap = new HashMap<int, myObject>();

但是,返回的错误是 - 标记“int”的语法错误,此标记后预期的维度 - 我不明白为什么我应该添加维度(即:将 int 放入数组中),因为我只需要存储一个数字作为关键。

我能做什么?

提前致谢! :)

原文由 MrD 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 862
2 个回答

您不能使用原语,因为 HashMap 在内部使用对象作为键。所以你只能使用继承自 Object 的对象(即任何对象)。

这是 HashMap 中的函数 put() ,正如您所看到的,它使用 Object 表示 K:

 public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key);
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }

    modCount++;
    addEntry(hash, key, value, i);
    return null;
}

表达式“k = e.key”应该清楚。

我建议使用像 Integer 和自动装箱这样的包装器。

原文由 user1883212 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 Integer 代替。

 HashMap<Integer, MyObject> myMap = new HashMap<Integer, MyObject>();

Java 会自动将您的 int 原始值自动装箱为 Integer 对象。

从 Oracle Java 文档中阅读有关 自动装箱 的更多信息。

原文由 gaborsch 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题