java - HashSet 如何为对象或值创建 hashkey

标签 java hashset

我对 HashSet 的内部工作有点困惑,因为我知道 HashSet 使用 key(K) 来找到正确的桶并使用 equals 来比较值,但是 HashSet 的工作方式意味着它如何生成哈希键?

最佳答案

在这里

final int hash(Object k) {
    int h = hashSeed;
    if (0 != h && k instanceof String) {
        return sun.misc.Hashing.stringHash32((String) k);
    }

    h ^= k.hashCode();

    // This function ensures that hashCodes that differ only by
    // constant multiples at each bit position have a bounded
    // number of collisions (approximately 8 at default load factor).
    h ^= (h >>> 20) ^ (h >>> 12);
    return h ^ (h >>> 7) ^ (h >>> 4);
}

其实是在HashSet内部使用的HashMap中

关于java - HashSet 如何为对象或值创建 hashkey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21570049/

相关文章:

java - 为什么 JAXB 说 "xxx is an interface, and JAXB can' t 处理接口(interface)”。即使生成的类不是接口(interface)

java - 无法将java.util.Date值与MySQL datetime列值进行比较

java - 字母频率排序数组

java - DataBase(数据模型)构建文件夹结构

java - 如何在不读取逗号的情况下从字符串中读取 double 和整数

java - 为什么添加5个对象后这个集合的大小是1?

java - 查找两个字符串的交集,其中返回两个字符串中出现的字符(与第一个字符串的序列顺序相同)

java - 更改字段值时的 HashSet 行为

java - 将我的 HashSet 显示到 ListView

java - 当字段不再使用时,我是否每次都必须 .clear() HashSet 和 HashMap ?