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

为什么Hashtable不允许空键或空值?

年光明
2023-03-14
问题内容

如JDK文档中所指定,Hashtable不允许空键或值。HashMap允许一个null键和任意数量的null值。为什么是这样?


问题答案:

Hashtable是较老的类,通常不鼓励使用Hashtable。也许他们看到了对null键的需求,更重要的是对null值的需求,并将其添加到HashMap实现中。

HashMap是较新的,并且具有更高级的功能,这些基本上只是对Hashtable功能的改进。创建HashMap时,它专门用于将空值作为键来处理,并将它们作为特殊情况来处理。

编辑

Hashtable
JavaDoc:

为了成功地从哈希表存储和检索对象,用作键的对象必须实现hashCode方法和equals方法。

由于null不是对象,因此您无法对其进行调用.equals()或调用.hashCode(),因此Hashtable无法计算哈希值以将其用作键。



 类似资料:
  • 在Java9中,为、和接口引入了新的工厂方法。这些方法允许在一行中快速实例化具有值的Map对象。现在,如果我们考虑: 以上内容是允许的,没有任何例外,如果我们这样做: 我知道HashMap可以将null作为键和值,但为什么在Map.of的情况下会受到限制呢? 同样的情况也发生在和中。

  • 问题内容: 为什么Hashtable不带钥匙? 另外,为什么HashMap允许键? 使这两个类的键行为如此不同的目的是什么? 问题答案: 从 JavaDoc: 简而言之,由于不是对象,因此无法调用或对其进行调用,因此无法计算哈希值以将其用作键。 较新,并且具有更高级的功能,基本上只是对功能的改进。这样,在创建时,它专门设计为将值作为键来处理,并将它们作为特殊情况来处理。 具体来说,在发出时,像这样

  • 我正在阅读jls§5.1.7,它说有9种拳击类型,第9种是拳击 然后我读到的拆箱转换会抛出一个。好的,这很明显。那么为什么的装箱不会抛出一个以及装箱值有什么用呢?

  • 问题内容: 如何使用T-SQL更改表中的一个属性以允许为null(不为null-> null)?也许更改表? 问题答案:

  • 我正在尝试在网页上嵌入一个小程序。我已经将代码导出为IntelliJ中的压缩applet。现在,当我尝试运行它时,我得到以下堆栈跟踪: 我相信该错误是由于试图使用类中的方法获取图像而导致的。这是代码: 下面是我在HTML中使用的标记以供参考: 如果您想亲自查看错误,只需访问http://nrubin29.github.io/freefall-applets/ 谢谢!

  • 问题内容: Java将原始数据类型包装到包装器类,然后为什么 不允许,但 被允许。 问题答案: 因为原语表示 值, 而对象变量表示对复杂数据对象的 引用 (类似于指针)。 没有通用的null值,它是一个特殊的关键字,它“不引用任何内容”或为空引用 -这是非常不专业的答案,但我想它会是最合适的。 此外,您认为null的数值是多少?0?-1?但是,这些是有效的整数,那又是什么? 我强烈建议您开始熟悉以