java - HashMap 实现中的泛型

标签 java generics hashmap

在Java实现中,我发现

 transient Entry[] table; 
 which is initiated in constructor as
 table = new Entry[capacity];

我知道并理解不允许创建通用数组,但我不明白的是整个事情是如何工作的。我的意思是当我们做类似的事情

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

上述代码如何创建 <Integer, String> 类型的 Entry 数组

好吧,很少有人无法理解我在问什么。换句话来说,我要问的是做这样的事情有什么意义

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

当它没有导致

Entry<Integer, String>

最佳答案

泛型是编译时安全的。在运行时, map 只知道对象。这称为类型删除。更让你害怕的是,下面的代码将毫无问题地运行:

Map<Integer, Integer> safeMap = new HashMap<>();
Map unsafeMap = safeMap;
unsafeMap.put("hello", "world");

您将在编译时收到警告,因为您使用的是原始映射而不是通用映射,但在运行时,根本不进行任何检查,因为该映射是一个很好的旧映射,能够存储任何目的。只有编译器会阻止您在映射中添加字符串或整数。

关于java - HashMap 实现中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28125197/

相关文章:

java - 在 Vaadin 中绑定(bind) TwinColSelect

java - java中的DateFormat给出了意想不到的结果

java - 错误 : 'com.android.build.api.transform.TransformException: Error while generating the main dex list.'

vb.net - 类型转换通用类型

java - 设计一个在数组中存储可比对象的通用类

java - Swing 动画运行速度极慢

java - 在Java中声明类和接口(interface)的成员变量

Java:如何从不基于键的 HashMap 中正确删除值

java - 从 HashMap 中读取对象内容

java - 如何反转HashMap?