gpt4 book ai didi

java - 为什么 java 的 HashMap 重新检查存储桶内的哈希码

转载 作者:行者123 更新时间:2023-11-29 07:28:15 25 4
gpt4 key购买 nike

当 HashMap 搜索键时,它在两个地方使用键的哈希码:

  1. 选择桶
  2. 在桶中查找条目 ( openjdk7 HashMap get method source )


    public V get(Object key) {
    if (key == null)
    return getForNullKey();
    int hash = hash(key.hashCode());
    for (Entry e = table[indexFor(hash, table.length)];
    e != null;
    e = e.next) {
    Object k;
    if (e.hash == hash && ((k = e.key) == key || key.equals(k)))
    return e.value;
    }
    return null;
    }

为什么 HashMap 会检查 bucket 中的 hashcode?为什么仅检查存储桶内的引用和对象相等性还不够?

最佳答案

比较哈希码(已经计算过,所以不需要再次调用hashCode()方法),也就是int比较,通常会比调用更便宜等于

由于一个桶可能包含具有不同哈希码的键(例如,在具有 16 个桶的 HashMap 中,哈希码 1 和 17 将映射到同一个桶),首先比较哈希码可能省去运行 equals 的需要(当哈希码彼此不相等时)。

这类似于在调用 equals 之前检查引用相等性 ((k = e.key) == key) 的优化。

关于java - 为什么 java 的 HashMap 重新检查存储桶内的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com