数组M的大小应该在线性探测哈希表中有多大?

时间:2013-12-25 15:20:33

标签: java hash hashtable

我试图了解使用Java的线性探测哈希表的实现。但是,我很难理解为什么M的初始值为30001.代码的骨架如下所示。

    public class LinearProbingHashTable<Key, Value>{
      private int M = 30001;
      private Value[] vals = (Value[]) new Object[M];
      private Key[] keys = (Key[]) new Object[M];

      private int hash(Key key){...}
      public void put(Key key, Value val){...}
      public Value get(Key key){...}
    }

我的问题是为什么M在这里被初始化为30001。这是一个经验法则吗?在初始化线性探测哈希表时,我应该如何确定M的大小?

1 个答案:

答案 0 :(得分:2)

您必须知道这部分代码的用途,以便更好地理解这一点。也许,或者可能,键都在[0,30000]之内。


进一步阅读

  1. [1] [2] 选择合适的HashTableSize对于此方法的成功非常重要。例如,HashTableSize为2将产生偶数键的哈希值,以及奇数键的奇数哈希值。这是一个不受欢迎的属性,因为如果它们碰巧是偶数,所有键都会哈希到相同的值。如果HashTableSize是2的幂,则散列函数仅选择Key位的子集作为表索引。为了获得更随机的散射, HashTableSize应该是一个不太接近2的幂的素数。

  2. 查看[3]如何为哈希选择合适的桌子大小。