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。 int
或double
不起作用。 你必须使用它的封闭types。 举一个例子
Map<String,Integer> m = new HashMap<String,Integer>();
现在两个都是对象,所以这个就行了。
您可以在generics参数中使用引用types,而不是原始types。 所以在这里你应该使用
Map<String, Integer> myMap = new HashMap<String, Integer>();
和存储价值
myMap.put("abc", 5);