当前位置: 首页 > 面试题库 >

HashMap实现中的泛型

晋承运
2023-03-14
问题内容

在Java实现中,我发现

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

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

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

上面的代码如何导致创建类型为Entry的数组 <Integer, String>

好吧,很少有人无法理解我的要求。改写我要问的是做这样的事情有什么意义

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

当它不导致

Entry<Integer, String>

问题答案:

该实现使Entry<K,V>类型为对象的数组

static class Entry<K,V> implements Map.Entry<K,V>

而不提供通用类型参数(source)。这是允许的,但是要理解编译器不再保证类型安全。例如,在代码的其他地方,您可以编写

Entry<K,V> e = table[bucketIndex];

编译器将允许您执行此操作。如果您确定始终将的元素设置table[]nullEntry<K,V>,则可以知道分配是正确的。

这样做没有问题的原因是Java中的泛型类型是通过类型擦除实现的,即Entry<K,V>对象Entry<Integer,Integer>和之间在运行时没有区别Entry<String,Long>



 类似资料:
  • 和函数类似,实现(implementation)也需要关注保持泛型。(原文:Similar to functions, implementations require care to remain generic.) struct S; // 具体类型 `S` struct GenericVal<T>(T,); // 泛型类型 `GenericVal` // GenericVal 的实现,此处我们

  • 本文向大家介绍HashMap的底层实现?相关面试题,主要包含被问及HashMap的底层实现?时的应答技巧和注意事项,需要的朋友参考一下 JDK1.8之前 JDK1.8 之前 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是

  • 我被分配了一个问题:编写一个通用的加权元素 到目前为止,我已经创建了类并实现了Compariable,但在为W创建compareTo()方法时遇到了问题。我有: 我遇到的问题是,当我比较权重时,没有找到数据的权重。还有没有其他我必须创建的方法来正确地拥有一个在其中一个变量上实现可比较的类?谢谢你的帮助

  • 有人能告诉我第一个和第二个代码之间的区别吗?MaxPQ代表优先级队列,它是可以相互比较的“键”对象的集合。 代码1: 代码2: 第二个代码没有编译,但我不明白为什么在使用泛型时需要扩展而不是实现接口。

  • 泛接口实现方式主要用于服务器端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过实现GenericService接口处理所有服务请求。 在 Java 代码中实现 GenericService 接口: package com.foo; public class MyGenericService impleme