我想建立一个HashMap这将有整数键和对象值。
我的语法是:
HashMap<int, myObject> myMap = new HashMap<int, myObject>();
然而,返回的错误是 - 令牌“INT”语法错误,尺寸预计此令牌后 - 我不明白为什么我要补充一个维度(即:使INT到一个数组),因为我只需要存储一个数字作为重点。
我能做什么?
提前致谢! :)
我想建立一个HashMap这将有整数键和对象值。
我的语法是:
HashMap<int, myObject> myMap = new HashMap<int, myObject>();
然而,返回的错误是 - 令牌“INT”语法错误,尺寸预计此令牌后 - 我不明白为什么我要补充一个维度(即:使INT到一个数组),因为我只需要存储一个数字作为重点。
我能做什么?
提前致谢! :)
你不能在内部使用原始的,因为HashMap的使用对象为重点。 所以,你只能使用从Object继承的对象(即任何对象)。
这是函数的put()在HashMap和你可以看到它使用对象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
代替。
HashMap<Integer, MyObject> myMap = new HashMap<Integer, MyObject>();
Java将自动autobox你int
的原始值到Integer
对象。
了解更多关于自动装箱从Oracle的Java单证。
对于大家谁的Java代码Android设备,并在这里结束了:使用SparseArray获得更好的性能
private final SparseArray<myObject> myMap = new SparseArray<myObject>();
这样,你可以使用整数的int,而不是像
int newPos = 3;
myMap.put(newPos, newObject);
myMap.get(newPos);
您可以尝试使用特罗韦http://trove.starlight-systems.com/
TIntObjectHashMap可能是你在找什么。
HashMap中不允许基本数据类型作为参数。 它只能接受这样的对象
HashMap<int, myObject> myMap = new HashMap<int, myObject>();
不管用。
你必须申报变更为
HashMap<Integer, myObject> myMap = new HashMap<Integer, myObject>();
所以,即使你做到以下
myMap.put(2,myObject);
原始数据类型autoboxed到整数对象。
8 (int) === boxing ===> 8 (Integer)
你可以阅读更多的自动装箱这里http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html
如果您在Android的代码,有SparseArray ,映射整数对象。
与HashMap中不允许原始作为键主要原因是HashMap中被设计成这样一种方式,用于比较的钥匙,它使得使用equals()方法,和一种方法只能在一个对象不是在原始调用。
因此,当int值autoboxed为整数,哈希映射可以调用等号整数对象上()方法。
这就是为什么你应该使用INT的整数。 我的意思是HashMap中抛出一个错误,而把廉政作为重点(不知道在引发错误的意思)
如果你认为,你可以使地图的性能更快通过使原始的一个关键,有一个叫FastUtil库,包含整型作为密钥的Map实现。
正因为如此,它比哈希映射快得多
使用int作为对象不是作为原始类型
HashMap<Integer, myObject> myMap = new HashMap<Integer, myObject>();
请使用HashMap<Integer, myObject> myMap = new HashMap<Integer, myObject>();
我不明白为什么我要补充一个维度(即:使INT到一个数组),因为我只需要存储一个数字的关键。
阵列也是一个对象,所以HashMap<int[], MyObject>
是使用INT数组作为密钥的有效构造。
编译器不知道你想要什么,或者你需要什么,它只是看到一个语言结构几乎是正确的,并警告有什么遗漏它是完全正确的。