在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/