【问题标题】:Different Ways of Creating HashMaps创建 HashMap 的不同方法
【发布时间】:2012-10-20 03:05:01
【问题描述】:

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

HashMap hash1 = new HashMap();

对比

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

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

【问题讨论】:

  • 另外,将变量声明为 Map 是一个好习惯 - 快速查看 this post 了解更多信息。
  • Java,感谢您的帖子。
  • 您没有将任何答案标记为已接受答案是否有原因?

标签: java hashmap


【解决方案1】:

这些是您的选择:

J2SE

 Map map = new HashMap();

J2SE 5.0+ 风格(使用generics):

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

Google Guava 样式(更短更灵活):

 Map<KeyType, ValueType> map = Maps.newHashMap();

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 不客气@StaticGamedude,您能否考虑将其标记为答案?有用投票下的复选标记:)
    【解决方案3】:

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

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

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

    【讨论】:

    • +1 可以很好地解释编译时和运行时的差异。
    【解决方案4】:

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

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

    -另外值得一提的是,有一个进程被称为Erasure

    -> Erasure 是一个过程,其中type parameterstype arguments 被编译器从泛型类和接口中删除,使其向后兼容使用没有泛型的代码。

    所以,

    HashMap&lt;String, Integer&gt; map = new HashMap&lt;String, Integer&gt;();

    成为Raw type

    HashMap map = new HashMap();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多