当前位置: 首页 > 知识库问答 >
问题:

HashMap中空键的Hashcode

姚俊贤
2023-03-14

我刚刚在阅读java中HashMap和HashTable类之间的区别。我发现了一个区别,前者允许空键,而后者不允许相同的权限。就HashMap的工作而言,我知道,它在key上调用hashcode方法来查找要放置该键值对的存储桶。我的问题来了:空值的hashcode是如何计算的,或者空值的hashcode是否有默认值(如果有,请指定值)?

共有3个答案

东门清夷
2023-03-14

如果您阅读HashMap中< code>static int hash(int h)方法的描述,您会发现空键的索引为0。

伏欣悦
2023-03-14

从HashMap的源代码来看,如果键为<code>null</code>则处理方式不同。没有为null生成哈希代码,但它唯一存储在内部数组的索引0处,哈希值为0。还请注意,空字符串的哈希值也为0(如果键是字符串),但存储在内部阵列中的索引确保它们不会混淆。

 /**
 * Offloaded version of put for null keys
 */
private V putForNullKey(V value) {
    for (Entry<K,V> e = table[0]; e != null; e = e.next) {
        if (e.key == null) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }
    modCount++;
    addEntry(0, null, value, 0);
    return null;
}
夏侯枫
2023-03-14

从HashMap:

public V put(K key, V value) {
   if (key == null)
      return putForNullKey(value);
   ...

如果你看得更远,你会发现null总是指向bin 0

 类似资料:
  • 问题内容: 我只是在阅读有关Java中HashMap和HashTable类之间的区别。在那里,我发现了一个区别,即前者允许空键,而后者则没有特权。就HashMap的工作而言,我知道,它在键上调用hashcode方法,以查找要在其中放置该键值对的存储桶。我的问题来了:如何计算空值的哈希码?或者空键的哈希码是否有任何默认值(如果需要,请指定该值)? 问题答案: 从HashMap: 如果进一步看,您会发

  • HashMap将其数据保存在存储桶中,如下所示: 要在HashMap中放置一些东西,我们需要一个hash()函数,它返回从0到table.length()范围内的关键哈希,对吗? 假设我有: 这将返回以下内容: 字符串本机哈希代码:46882035,哈希映射哈希:46882360 我们应该有大约256个桶(所以关键的散列应该在0到256的范围内),但是HashMap中的内部散列给了我们468823

  • 关于下面的代码,我有两个问题, 1.我在哈希图中有两次键“二”,打印时,“二”只显示一次。为什么它没有显示“二”两次? 2.如何选择性地显示键“二”?

  • 我有一个<code>HashMap 有没有比排序HashMap更好的解决方案,然后使用 顺便说一句,我一开始并不一定要使用HashMap,但值设置了顺序,我不想交换键和值,因为浮点值可能会改变好几次。

  • 问题内容: 您如何在中搜索密钥?在此程序中,当用户输入密钥时,代码应安排在哈希图中搜索相应的值,然后进行打印。 请告诉我为什么它不起作用。 问题答案: 只需致电:

  • 我需要双键并发hashmap。 我的第一次尝试只是使用java.util.concurrent.ConTrentHashMap。像这样 但我觉得这很难看。 我的第二次尝试是使用对象作为键。像这样 最后一次尝试是创建DualkeyConcurrentHashMap。我只需要放,拿,康纳斯基。 它更好,而且完全线程安全吗?(我不能确定所有方法都需要同步。) 还有其他推荐的方法吗?