HashMap的get()方法

时间:2015-11-06 00:36:53

标签: java hashmap

我有一个HashMap:

Map stuff = new HashMap<String, ArrayList<Thing>();

我正在尝试使用.get()方法获取ArrayList,但我收到一条错误消息,

  

无法将对象转换为ArrayList;

我不确定为什么会收到此错误消息?另外,还有另一种获取密钥ArrayList的方法吗?

1 个答案:

答案 0 :(得分:2)

尝试使用&lt;&gt;参数化地图声明。

Map<String, ArrayList<Thing>> stuff = new HashMap<>() ;

如果没有类型声明,它将是一个无类型的Map,因此编译器只能假设get的结果是最通用的可能结果,即Object。

使用菱形运算符,编译器将从左侧声明中推断出右侧的类型。

您可以将get的结果转换为ArrayList,但最好参数化Map声明。强制转换将需要运行时检查,这些检查具有一定的性能成本,并且一旦您的代码变得更难理解,就可能引入崩溃。如果使用参数化形式,编译器可以证明它是正确的类型,防止崩溃并且运行得更快。

如果你在java 1.7之前使用旧的java,你需要在&lt;&gt;中写出完整的类型。

有关详细信息,请参阅oracle中的tutorial