当前位置: 首页 > 知识库问答 >
问题:

HashMap初始化[重复]

巢德华
2023-03-14

如果我写

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

而不是

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

或者与之相反

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

第一个在任何方面都不安全吗?

共有2个答案

冯枫
2023-03-14

亚历克斯,

它不太可能是“不安全的”,但第三个示例的额外特性提供了最大程度的类型安全保护,使其不受运行时的影响。

我建议使用泛型接口来实例化:

Map<String,String> map = new HashMap<String,String>();
郭元明
2023-03-14

第二种只是第三种选择的缩写。

如果使用不同的构造函数,第一种方法可能会导致问题,因为它忽略泛型。

例如,以下编译:

Map<Integer, Integer> intMap = ...;
Map<String, String> strMap = new HashMap(intMap);

因为在运行时没有通用的检查,所以它甚至可以无错误地执行。但是,如果intMap包含数据,并且您从strMap访问它(例如,通过迭代键),您将得到一个运行时异常。

这样的错误很难跟踪,因为异常可能发生在远离违规行的地方。

所以,在你的特殊情况下,它不会导致问题,但如果你养成了这个习惯,你最终会遇到问题。此外,您将得到编译器警告,您必须抑制或忽略这些警告,这两件事都应该避免。

 类似资料:
  • 问题内容: 我不熟悉Java,而是通过创建一个简单的NaiveBayes分类器进行练习的。我还是对象实例化的新手,想知道如何初始化HashMaps的HashMap。在将新观察值插入分类器时,我可以为给定类中的看不见的功能名称创建新的HashMap,但是我需要初始化吗? 请注意,这个问题并非专门针对朴素贝叶斯分类器,只是认为我会提供一些上下文。 问题答案: 是的,您需要对其进行初始化。 当您想向cl

  • 问题内容: 我应该传递什么值来为N个项目创建有效的/ 基于结构的结构? 在中,有效数字为N(N已假定未来增长)。a的参数应该是什么?((int)(N * 0.75d),0.75d)?更多?减?更改负载系数有什么影响? 问题答案: 关于负载因子,我将简单引用HashMap javadoc : 通常,默认负载因子(.75)在时间和空间成本之间提供了很好的折衷。较高的值会减少空间开销,但会增加查找成本(

  • 问题内容: 这些陈述有何不同? 双虚拟= 0; 双虚拟= 0.0; 双虚拟= 0.0d; 双虚拟= 0.0D; 问题答案: 尝试过一个简单的程序(使用0和100来显示“特殊”常数和通用常数之间的差异)之后,Sun Java 6编译器将为1和2输出相同的字节码(情况3和4与2相同)就编译器而言)。 因此,例如: 编译为: 但是,我在Java语言规范中看不到任何能 保证 常量表达式的编译时扩展的东西。

  • Initialization 初始化 Although it doesn’t look superficially very different from initialization in C or C++, initialization in Go is more powerful. Complex structures can be built during initialization a

  • 初始化是为类、结构体或者枚举准备实例的过程。这个过需要给实例里的每一个存储属性设置一个初始值并且在新实例可以使用之前执行任何其他所必须的配置或初始化。 你通过定义初始化器来实现这个初始化过程,它更像是一个用来创建特定类型新实例的特殊的方法。不同于 Objective-C 的初始化器,Swift 初始化器不返回值。这些初始化器主要的角色就是确保在第一次使用之前某类型的新实例能够正确初始化。 类类型的