Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哈希映射初始化_Java - Fatal编程技术网

Java 哈希映射初始化

Java 哈希映射初始化,java,Java,如果我写 HashMap<String, String> map = new HashMap(); HashMap map=newhashmap(); 相对于 HashMap<String, String> map = new HashMap<>(); HashMap map=newhashmap(); 还是与之相反 HashMap<String, String> map = new HashMap<String, String>

如果我写

HashMap<String, String> map = new HashMap();
HashMap map=newhashmap();
相对于

HashMap<String, String> map = new HashMap<>();
HashMap map=newhashmap();
还是与之相反

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

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

第二种方法只是第三种方法的缩写

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

例如,以下编译:

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

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


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

第二个警告只是第三个选项的缩写

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

例如,以下编译:

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

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

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

Alex

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

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

Map<String,String> map = new HashMap<String,String>();
Map Map=newhashmap();
Alex

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

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

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

后两者是等效的;对第一个不太确定,但我相信它会让事情变得有点混乱,因为缺少泛型。我不知道“不安全”,但对于第二个变体,你可能想读@Jeroen Vannevel Yes,我的问题是,第一个字节码有什么不好?你应该看到这三个字节码生成的字节码是相同的;对第一个不太确定,但我相信它会让事情变得有点混乱,因为缺少泛型。我不知道“不安全”,但对于第二个变体,你可能想读@Jeroen Vannevel Yes,我的问题是第一个有什么不好?你应该看到这三个都生成了相同的字节码。为什么这比
newhashmap()
好?它提供了什么保护?有点误导;第二种和第三种选择完全相同。您所说的“额外的特殊性”实际上是额外的详细性为什么这比
newhashmap()
好?它提供了什么保护?有点误导;第二种和第三种选择完全相同。你所说的“额外的具体性”实际上是额外的冗长