【问题标题】:why HashMap contains single null value in java? [duplicate]为什么HashMap在java中包含单个空值? [复制]
【发布时间】:2017-09-03 18:27:06
【问题描述】:

为什么HashMap在java中包含单个空值?

我在一次采访中问过为什么 HashMap 允许 Null 值。我找到了一篇描述 HashMap 实现的文章。但没有说明为什么它只包含 null。这背后的原因是什么,为什么设计师设计包含 Null。 来自 Oracle 源代码...

public class HashMap<K,V>  extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

Map 接口的基于哈希表的实现。此实现提供所有可选的映射操作,并允许空值和空键。 (HashMap类大致相当于Hashtable

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html
but why HashMap allows only single Null value ?

【问题讨论】:

  • 是否有任何其他键多次“允许”? ;)
  • 但是为什么为null,它应该是空白的。
  • 什么应该是“空白”?
  • 如果你知道hashmap的实现它包含单个null但是为什么,它应该包含16个null,以保持hashmap的唯一性。
  • 16 个 null 不是唯一的,只有一个是“唯一的”。一般注意,hashmap 本身并不 包含 null,它只是 允许 它们。

标签: java


【解决方案1】:

我们可以推测HashMap 允许null 键和null 值,因为这样做很有用。或者,从另一方面来说,禁止空值不会带来太多附加值。

HashMap 只允许一个null 键,因为Maps 通常不支持重复键。

【讨论】:

  • 是空的,给出了唯一性,如果是的话怎么办?
  • @shiv 当然不是。你不能有重复的null 键,因为你不能有任何重复的键。
【解决方案2】:

Hashtable(HashMap 的前身)不允许 null,这是一个皮塔,在您需要一个地图的情况下,您将带有 null 的键值对存储为可能的值,因为尝试设置它会导致 NullPointerException。

您最终创建了一个设置为值的private final static Object NULL,并且每次设置或检索一个值时,您都必须检查空值/代表值并相应地进行更改。

HashMap 允许 null 作为值因此受到高度赞赏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2015-10-31
    • 2017-03-11
    • 1970-01-01
    • 2012-05-23
    • 2011-02-26
    • 2021-10-09
    相关资源
    最近更新 更多