定义函数以确定HashTable统计信息

时间:2015-10-28 21:12:56

标签: java arrays linked-list hashmap hashtable

好的,所以我有一个类将字典文件读入哈希表,比较用户输入的字词并返回建议的字词。我的程序实现了一个HashTable,它使用链表来为值创建存储桶。我已完成程序,我无法开发一种方法来打印最大链长,表中使用的桶的百分比和平均链长。

public class DictionaryTable {

    public String workingDir = System.getProperty("user.dir");//stores uses working director
    public String DICT_FILENAME = "\\src\\dictionary.txt";
    public String D_PATH = workingDir + DICT_FILENAME;

    private int DICT_SIZE; //determines size of dictionary
    final private Bucket[] array;

包含上面的方法,以了解我的类和哈希函数中使用的私有变量。我还提供了我的哈希以防万一它需要。

private int hash(String key) {
        return (key.hashCode() & 0x7fffffff) % DICT_SIZE;
    }

1 个答案:

答案 0 :(得分:0)

  

我在开发确定负载系数的方法时遇到了麻烦,

加载因子是在您将表加倍之前允许在哈希表中插入的键数。例如。如果你的桌子的大小是32,你的负载系数是50%,那么当你有16个元素时,你的桌子会翻倍 加载因子可以是哈希表的客户端传递的参数,即配置,也可以有一个默认值,在实际实现中是一个取决于哈希表变量的值(通常值为~75%)

  

最大链长

您不应考虑链长而是负载因子(请参阅上一段)。决定链条长度并不是一个好主意,因为你最终会因为1桶已经饱和而使你的桌子加倍了#34;你表的其余部分都可以。

  

我表中使用的桶的百分比

你无法确定。您的哈希函数及其有多好决定了分布。除非你有一个非常好的哈希函数,否则你将无法在哈希表中使用大部分桶(聚类效果)

  

平均链长。

这又取决于你的哈希函数和冲突。你做确定这一点。