我最近一直在学习 HashMaps,但我有一个问题似乎无法得到明确的答案。之间的主要区别 -
HashMap hash1 = new HashMap();
对比
HashMap<,>hash1 = new HashMap <,> (); //Filled in with whatever Key and Value you want.
我认为当您定义 HashMap 时,它需要键和值。任何帮助将非常感激。谢谢你。
这些是您拥有的选项:
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();
你应该看看Java generics,如果你不指定 HashMap 的类型,键和值都是Object
类型。
因此,如果您想要一个带有Integer
键和String
值的 HashMap,例如:
HashMap<Integer, String> hashMap= new HashMap<Integer, String>();
通过启用编译时类型强制执行,指定key
和value
类型可以提高类型安全性。
这样可以更轻松地编写不会意外混淆键和值类型的代码,并减少必须在代码中显式声明的强制转换数量。
但是,重要的是要知道这些类型检查仅在编译时进行,即一旦应用程序运行,JVM 将允许您对键和值使用任何类型。
- Generics
可以隐含到类、接口、方法、变量等。但使用它的最重要原因是使Collection
类型更安全。
- Generics
确保只有特定类型的对象进入和退出。Collections
-此外,值得一提的是,有一个过程称为Erasure
,
->Erasure
是一个过程,其中type parameters
和由编译器从泛型类和接口type arguments
中删除,使其与没有泛型编写的代码兼容。
所以,
HashMap<String, Integer> map = new HashMap<String, Integer>();
变成Raw type
,
HashMap map = new HashMap();