我正在尝试构建一个HashMap,它将整数作为键,对象作为值.
我的语法是:
HashMap<int, myObject> myMap = new HashMap<int, myObject>();
Run Code Online (Sandbox Code Playgroud)
但是,返回的错误是 - 令牌"int"上的语法错误,此令牌后预期的维度 - 我不明白为什么我应该添加维度(即:将int转换为数组)因为我只需要存储一个数字作为关键.
我能做什么?
提前致谢!:)
gab*_*sch 128
请Integer改用.
HashMap<Integer, MyObject> myMap = new HashMap<Integer, MyObject>();
Run Code Online (Sandbox Code Playgroud)
Java将自动将int原始值自动装箱到Integer对象.
阅读有关Oracle Java文档中的自动装箱的更多信息.
小智 41
对于为Android设备编写Java代码并在此处结束的所有人:使用SparseArray以获得更好的性能
private final SparseArray<myObject> myMap = new SparseArray<myObject>();
Run Code Online (Sandbox Code Playgroud)
有了这个,你可以使用int而不是Integer之类的
int newPos = 3;
myMap.put(newPos, newObject);
myMap.get(newPos);
Run Code Online (Sandbox Code Playgroud)
use*_*212 22
您不能使用原语,因为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;
}
Run Code Online (Sandbox Code Playgroud)
表达式"k = e.key"应该清楚.
我建议使用像Integer和autoboxing这样的包装器.
HashMap 不允许原始数据类型作为参数。它只能接受对象,所以
HashMap<int, myObject> myMap = new HashMap<int, myObject>();
Run Code Online (Sandbox Code Playgroud)
不管用。
您必须将声明更改为
HashMap<Integer, myObject> myMap = new HashMap<Integer, myObject>();
Run Code Online (Sandbox Code Playgroud)
所以即使您执行以下操作
myMap.put(2,myObject);
Run Code Online (Sandbox Code Playgroud)
原始数据类型会自动装箱为 Integer 对象。
8 (int) === boxing ===> 8 (Integer)
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关自动装箱的更多信息http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
对于对此类映射感兴趣的人,因为您希望减少Java 中基本类型包装器的自动装箱占用空间,我建议使用 Eclipse 集合。Trove 不再受支持,我相信从这个意义上来说它是相当不可靠的库(尽管它无论如何都很流行)并且无法与Eclipse 集合进行比较。
import org.eclipse.collections.impl.map.mutable.primitive.IntObjectHashMap;
public class Check {
public static void main(String[] args) {
IntObjectHashMap map = new IntObjectHashMap();
map.put(5,"It works");
map.put(6,"without");
map.put(7,"boxing!");
System.out.println(map.get(5));
System.out.println(map.get(6));
System.out.println(map.get(7));
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中IntObjectHashMap。
当您需要int->object映射时,还要考虑使用YourObjectType[]数组或List<YourObjectType>通过索引访问值(因为映射本质上是一个关联数组)。
| 归档时间: |
|
| 查看次数: |
170837 次 |
| 最近记录: |