15

我最近一直在学习 HashMaps,但我有一个问题似乎无法得到明确的答案。之间的主要区别 -

HashMap hash1 = new HashMap();

对比

HashMap<,>hash1 = new HashMap <,> (); //Filled in with whatever Key and Value you want. 

我认为当您定义 HashMap 时,它需要键和值。任何帮助将非常感激。谢谢你。

4

4 回答 4

21

这些是您拥有的选项:

J2SE <5.0 风格:

 Map map = new HashMap();

J2SE 5.0+ 风格(使用泛型):

 Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>();

Google Guava风格(更短更灵活):

 Map<KeyType, ValueType> map = Maps.newHashMap();
于 2012-10-30T18:09:47.877 回答
11

你应该看看Java generics,如果你不指定 HashMap 的类型,键和值都是Object类型。

因此,如果您想要一个带有Integer键和String值的 HashMap,例如:

    HashMap<Integer, String> hashMap= new HashMap<Integer, String>();
于 2012-10-30T17:47:11.863 回答
3

通过启用编译时类型强制执行,指定keyvalue类型可以提高类型安全性。

这样可以更轻松地编写不会意外混淆键和值类型的代码,并减少必须在代码中显式声明的强制转换数量。

但是,重要的是要知道这些类型检查仅在编译时进行,即一旦应用程序运行,JVM 将允许您对键和值使用任何类型。

于 2012-10-30T17:52:04.000 回答
1

- Generics可以隐含到类、接口、方法、变量等。但使用它的最重要原因是使Collection 类型更安全

- Generics确保只有特定类型的对象进入和退出Collections

-此外,值得一提的是,有一个过程称为Erasure

->Erasure是一个过程,其中type parameters由编译器从泛型类和接口type arguments中删除,使其与没有泛型编写的代码兼容。

所以,

HashMap<String, Integer> map = new HashMap<String, Integer>();

变成Raw type,

HashMap map = new HashMap();

于 2012-10-30T18:02:01.397 回答