HashMap<String, int>
似乎不起作用,但HashMap<String, Integer>
确实起作用。你知道为什么吗?
发布于 2009-11-23 07:23:09
在Java中,不能将原始类型用作泛型参数。请改用:
Map<String, Integer> myMap = new HashMap<String, Integer>();
使用auto-boxing/unboxing,代码几乎没有什么不同。自动装箱意味着你可以写:
myMap.put("foo", 3);
而不是:
myMap.put("foo", new Integer(3));
自动装箱意味着第一个版本被隐式转换为第二个版本。自动拆箱意味着你可以写:
int i = myMap.get("foo");
而不是:
int i = myMap.get("foo").intValue();
对intValue()
的隐式调用意味着如果找不到密钥,它将生成一个NullPointerException
,例如:
int i = myMap.get("bar"); // NullPointerException
原因是type erasure。与C#不同的是,泛型类型在运行时不会被保留。它们只是显式强制转换的“语法糖”,可以省去你这样做的麻烦:
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");
发布于 2009-11-23 15:03:34
GNU Trove支持这一点,但不使用泛型。http://trove4j.sourceforge.net/javadocs/gnu/trove/TObjectIntHashMap.html
发布于 2016-09-09 12:25:59
不能在HashMap
中使用基元类型。int
或double
不起作用。你必须使用它的封闭类型。举个例子
Map<String,Integer> m = new HashMap<String,Integer>();
现在两者都是对象,所以这将会起作用。
https://stackoverflow.com/questions/1780385
复制相似问题