HashMap和int作为键
我正在尝试构建一个HashMap,它将整数作为键和对象作为值。
我的语法是:
HashMap<int, myObject> myMap = new HashMap<int, myObject>();
但是,返回的错误是 - 标记“int”的语法错误,这个标记之后预期的尺寸 - 我不明白为什么我应该添加一个尺寸(即:使int成为一个数组),因为我只需要存储一个数字作为关键。
我能做什么?
提前致谢! :)
你不能使用基元,因为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和自动装箱这样的包装。
改用Integer
。
HashMap<Integer, MyObject> myMap = new HashMap<Integer, MyObject>();
Java会自动将你的int
原始值自动装箱到Integer
对象中。
阅读有关Oracle Java文档自动装箱的更多信息。
对于每个为Android设备编码Java并在此处结束的人:使用SparseArray获得更好的性能
private final SparseArray<myObject> myMap = new SparseArray<myObject>();
有了这个你可以使用int而不是Integer
int newPos = 3;
myMap.put(newPos, newObject);
myMap.get(newPos);
链接地址: http://www.djcxy.com/p/59499.html