java:HashMap <String,int>不工作

HashMap<String, int>似乎不起作用,但HashMap<String, Integer>确实起作用。 任何想法为什么?

在Java中不能使用基本types作为通用参数。 改用:

 Map<String, Integer> myMap = new HashMap<String, Integer>(); 

随着自动装箱/拆箱 ,代码没有什么区别。 自动装箱意味着你可以写:

 myMap.put("foo", 3); 

代替:

 myMap.put("foo", new Integer(3)); 

自动装箱意味着第一个版本被隐式转换为第二个版本。 自动拆箱意味着你可以写:

 int i = myMap.get("foo"); 

代替:

 int i = myMap.get("foo").intValue(); 

intValue()的隐式调用意味着如果没有find该键,它将生成一个NullPointerException ,例如:

 int i = myMap.get("bar"); // NullPointerException 

原因是types删除 。 不像说,在C#中genericstypes不保留在运行时。 他们只是“语法糖”显式铸造,以节省你这样做:

 Integer i = (Integer)myMap.get("foo"); 

举个例子,这个代码是完全合法的:

 Map<String, Integer> myMap = new HashMap<String, Integer>(); Map<Integer, String> map2 = (Map<Integer, String>)myMap; map2.put(3, "foo"); 

GNU Trove支持这个,但不使用generics。 http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html

你不能在HashMap使用原始types。 intdouble不起作用。 你必须使用它的封闭types。 举一个例子

 Map<String,Integer> m = new HashMap<String,Integer>(); 

现在两个都是对象,所以这个就行了。

您可以在generics参数中使用引用types,而不是原始types。 所以在这里你应该使用

 Map<String, Integer> myMap = new HashMap<String, Integer>(); 

和存储价值

 myMap.put("abc", 5);