作为数据结构和算法实验问题之一,我试图创建具有CustomLinkedList []作为基础数据结构的Customhashtable以避免共谋(单独链接)。但是当负载因子超过75时,我会陷入困境将先前的内容映射到具有增加的大小的新数组,以便返回的索引与新大小相同,用于散列的代码为size = 100

public int arrayIndex(String key)
{
   int index = key.charAt(0);

   for(int j = 1;j<key.length;j++)
     {
        int temp = key.charAt(j);
         index = ((index*27)+temp)%100;
     }
}

最佳答案

基本上,您将构造一个新的哈希表,并将所有数据从旧的哈希表迁移到新的哈希表。负载因子是一个触发器,用于告诉您何时构造更新(更大)的表,这意味着新的哈希表将具有更大的起始数组。

您还可以(出于娱乐目的)添加“最小负载因子”设置,这将构造一个较小的哈希表。使用具有最小和最大加载因子的解决方案,初始支持数组(这是哈希选择表单的唯一部分)将在概念上根据存储项目的数量调整其大小。由于大小与性能有关,因此散列表可以始终保持可接受的性能范围(通过增大和缩小其内存占用量)。

至于负载系数的计算

  (in the store routines)

  if (array[index] == null) {
    loadCount++;
  }
  if (loadCount / arraySize > maxLoad) {
    resizeUp(...);
  }

  (in the remove routines)
  if (array[index] is cleared to null) {
    loadCount--;
  }
  if (loadCount / arraySize < minLoad) {
    resizeDown(...);
  }

07-24 14:43