编译器抱怨这段代码:
HashMap<String,int> userName2ind = new HashMap<String,int>();
for (int i=0; i<=players.length; i++) {
userName2ind.put(orderedUserNames[i],i+1);
}
它写出“意外类型”并指向int
。如果我将int
替换为String
而将i+1
替换为i+"1"
,则编译就可以了。这里有什么问题?
答案 0 :(得分:41)
Integer
没关系,int
- Java generics only work with reference types也不行,基本上是:(
试试这个 - 虽然要知道它会包装一切:
HashMap<String,Integer> userName2ind = new HashMap<String,Integer>();
for (int i=0; i<=players.length; i++) {
userName2ind.put(orderedUserNames[i],i+1);
}
答案 1 :(得分:2)
如果你有小集合,那么使用引用类型可能没什么问题,但是有一些选择,好的是trove4j。 Trove在使用纯原语重新创建集合API方面做得非常好。收益是很多较低的内存使用率,在许多情况下,插入/查找时性能更好。你的例子看起来像这样:
TObjectIntHashMap<String> userName2ind = new TObjectIntHashMap<String>();
for (int i=0; i<=players.length; i++) {
userName2ind.put(orderedUserNames[i],i+1);
}
根据我的经验,唯一的缺点是缺少这些的并发实现,所以你必须找到另一种管理线程安全的方法。