HashSet如何为对象或值创建hashkey

时间:2014-02-05 06:24:06

标签: java hashset

我对HashSet内部工作有点困惑,因为我知道HashSet使用密钥(K)来查找正确的存储桶和用于比较值的等于但是HashSet如何工作意味着它如何生成散列密钥?

2 个答案:

答案 0 :(得分:3)

这里是

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

答案 1 :(得分:1)

内部HashSet使用HashMap,生成值的哈希键并用于在HashTable中保存元素。

要生成元素的HashCode,请调用方法HashCode()

在HashMap的方法下面放置HashSet内部使用的元素来添加元素:

 public V put(K paramK, V paramV)
      {
        if (paramK == null)
          return putForNullKey(paramV);
        int i = hash(paramK.hashCode());
-----------------------------^
        // More code
      }