java - hashmap用法 - HashMap和int作为键




java hashmap用法 (7)

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

我的语法是:

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

但是,返回的错误是 - 标记“int”的语法错误,这个标记之后预期的尺寸 - 我不明白为什么我应该添加一个尺寸(即:使int成为一个数组),因为我只需要存储一个数字作为关键。

我能做什么?

提前致谢! :)

https://code.i-harness.com


我不明白为什么我应该添加一个维度(即:使int成为一个数组),因为我只需要将数字存储为键。

一个数组也是一个Object,所以HashMap<int[], MyObject>是一个使用int数组作为键的有效结构。

编译器不知道你想要什么或你需要什么,它只是看到一个几乎正确的语言结构,并警告缺少它是完全正确的。


HashMap不允许原始数据类型作为参数。 它只能接受对象

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

不管用。

您必须将声明更改为

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

所以即使你做了以下事情

myMap.put(2,myObject);

原始数据类型被自动装箱到一个Integer对象。

8 (int) === boxing ===> 8 (Integer)

你可以在http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html阅读更多关于自动装箱的信息。


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

这是函数put()在HashMap中,你可以看到它使用Object for 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和自动装箱这样的包装。


使用int作为Object而不是原始类型

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

对于每个为Android设备编码Java并在此处结束的人:使用SparseArray获得更好的性能

private final SparseArray<myObject> myMap = new SparseArray<myObject>();

有了这个你可以使用int而不是Integer

int newPos = 3;

myMap.put(newPos, newObject);
myMap.get(newPos);


请使用HashMap<Integer, myObject> myMap = new HashMap<Integer, myObject>();





hashmap