【问题标题】:Calculating number of data buckets used in hash tables计算哈希表中使用的数据桶数
【发布时间】:2017-02-26 23:52:47
【问题描述】:

我正在研究哈希表,我有一个疑问,我们必须计算使用的数据桶的数量(主要和溢出)。

这是一个线性哈希表,i = 3(使用的位数),如果使用的最大存储桶地址(以位为单位)='110',并且使用了 2 个溢出存储桶。

哈希表桶数的计算逻辑是什么?

您能解释一下公式吗,或者请提供一些与此相关的链接。
提前致谢!

【问题讨论】:

  • 这是一个关于基本原理的有趣问题,请将问题改写为实际问题,例如“计算哈希表存储桶计数的逻辑是什么”
  • 完成了,谢谢你的好意。这是我第一次来stackoverflow。我还在学习:D
  • 您是在谈论包含冲突的存储桶总数,这将是 hashtable.size() 或最后使用的存储桶,假设哈希表大小为 16(0 到 15)的第 15 个存储桶(已填充) ?
  • 我说的是包含冲突的桶的总数,这将是 hashtable.size()

标签: hashtable


【解决方案1】:

如果你使用的是 Java 提供的实现类,那么你可以使用 hashtable.size() 但如果你仍然想自己计算,那么

Iterator i = hashTable.entrySet().iterator();
int count = 0;

    while(i.hasNext())
    {
        count++;
        i.next();
    }

System.out.println(count); 

如果您使用的是自定义实现,那么

private Entry<K,V>[] table;   //Array of Entry.
private int capacity= 16;  //Initial capacity of Hashmap
int count = 0;
for(int i=0;i<capacity;i++){
       if(table[i]!=null){
              Entry<K, V> entry=table[i];
              while(entry!=null){
                    count++;
                    entry=entry.next;
              }
       }
   }
Syso(count);

这里我没有考虑在哈希表的情况下必不可少的同步。

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2019-07-17
    • 2013-02-16
    • 1970-01-01
    • 2017-12-26
    • 2011-07-22
    相关资源
    最近更新 更多